我对Windows Forms比较陌生,无法获取包含多个文本字段的表单来更新数据库。
我填充数据集,将数据绑定添加到每个字段,并向每个更新数据库的字段添加一个leave事件。
clientsTableAdapter.FillByID(dataSetClients.Clients, tempID);
txtForename.DataBindings.Add("Text", dataSetClients.Clients, "Forename");
txtForename.Leave += new EventHandler(updateDataSet);
private void updateDataSet(object sender, EventArgs e)
{
this.clientsTableAdapter.Update(this.dataSetClients.Clients);
}
数据库没有更新,我已经用很多不同的方式尝试了这一点,而且似乎工作的唯一方法是手动更新数据集然后在适配器上运行.update(),就像这样;
this.dataSetClients.Clients.Rows[0]["Forename"] = "New Forename";
this.clientsTableAdapter.Update(this.dataSetClients.Clients);
非常感谢有关此主题的任何帮助或指导。
答案 0 :(得分:2)
DataBindings的default DataSourceUpdateMode是OnValidation:由于在after the Leave event之前不会调用验证事件,因此不会更新值。
为DataBindings指定DataSourceUpdateMode.OnPropertyChanged
应该有效。
答案 1 :(得分:0)
不确定此问题是否仍然存在,我只是想贡献一些对我有帮助的事情。我在DataSet,数据绑定和数据方面遇到了同样的问题,这些问题在DataSet中已更改,但在数据库中未更改。我尝试了所有这些提示,但似乎没有任何帮助。
DataSet.Data.Tables[0].Rows[0].EndEdit(); //0 for your Index/Tablename
这对我有帮助,所以我可以将数据绑定到数据集,然后,当我想更新数据时,我将“EndEdit()”设置为当前数据集中的每个表。
我也试过这个:
foreach (Control bla in DisplayDict[SubTyp.ToString()].DataControlHelper.Values)
{
bla.BindingContext[DisplayDict[SubTyp.ToString()].DBData.Data].EndCurrentEdit();
}
没有改变,我也试过.GetChanges()和.HasChanges(),但.EndEdit()是我的代码中缺少的东西。
我希望这有助于某人。
P.S。对不起我的英文不好,自从我上次使用它已经有一段时间了(: