我很擅长使用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只是从文本框中提取的字符串。
感谢。
编辑:我应该提到我正在使用的数据库表名为tag,有两列,tagID和tagname。 tagID是GUID,标记名是varchar。
答案 0 :(得分: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中,并且您的组合框将自动更新,但需要注意的是它尚未写入您的数据库,因此您需要确保在某些时候保存到数据库中。
答案 1 :(得分:0)
您应该再次绑定数据并再次刷新控件,就像您第一次那样。它不仅仅显示数据。这是机械师。这不是实时的。