1

我对使用 C#(但不是 C# 本身)和数据绑定的整个概念使用数据库非常陌生,所以请记住这一点。如果这会影响到这一点,我也在使用 SQL Server CE。

我正在尝试使用用 VS2010 构建的强类型数据集来访问 SQL Server CE 数据库,并将 WinForms 控件绑定到它以显示数据。我可以很好地绑定控件,它们显示当前在数据库中的数据没有问题。我还可以将新数据插入数据库,如果我重新启动应用程序,插入的数据会显示在控件中(特别是 ComboBox,但我将来会使用更多)。

问题是在我重新启动应用程序之前,新行根本不会出现,我对数据绑定的理解是控件应该自动更新自己。我已经阅读了有关 INotifyPropertyChanged 的​​信息,但我不确定在这里使用它是否正确,如果是,我如何将它用于行插入?

我正在像这样绑定组合框:

DataSet.tagDataTable tagdata = new tagTableAdapter().GetData();
comboBox1.DataSource = tagdata;
comboBox1.DisplayMember = tagdata.tagnameColumn.ColumnName;
comboBox1.ValueMember = tagdata.tagIDColumn.ColumnName;

并像这样插入:

Guid g = Guid.NewGuid();
new tagTableAdapter().Insert(g, Name)

其中 Name 只是从文本框中提取的字符串。

谢谢。

编辑:我应该提到我正在使用的数据库表称为标签,有两列,tagID 和 tagname。tagID 是 GUID,tagname 是 varchar。

4

2 回答 2

2

您正在做的TableAdpater.Insert是将您的数据直接插入到您的数据库中,并且您正在规避应用程序中的任何通知。如果你这样做,那么你必须按照 iefpw 所说的去做,那就是重新加载你的数据表并重新绑定你的控件。

另一种方法是在数据表中添加一行。你可以尝试这样的事情:

// retrieve the datatable from the control
DataSet.tagDataTable tagdata = comboBox1.DataSource as DataSet.tagDataTable;
// create a new row and fill in the data
var dr = tagdata.NewRow();
dr["tagid"] = Guid.NewGuid();
dr["tagname"] = Name;
// actually add it to the table
tagdata.Rows.Add(dr);

此时,您已将其添加到 DataTable 中,并且您的组合框将自动更新,但需要注意的是它尚未写入您的数据库,因此您需要确保在某个时候将其保存到数据库中。

于 2012-04-08T23:42:01.927 回答
0

您应该像第一次那样再次绑定数据并再次刷新控件。它不只是显示数据。它是机械的。它不是实时的。

于 2012-04-08T20:03:09.173 回答