2011-03-22 56 views
0

我对Windows窗体比较陌生,无法获取带有多个文本字段的窗体来更新数据库。c#数据库没有从数据绑定更新

我填充数据集,将数据绑定添加到每个字段并向每个更新数据库的字段添加一个离开事件。

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); 

任何帮助或关于这个问题的指导意见是极大的赞赏。

回答

2

DataBindings的default DataSourceUpdateMode是OnValidation:因为验证事件直到after the Leave event才被调用,所以值不会更新。

指定DataSourceUpdateMode.OnPropertyChanged为DataBindings应该工作。

+0

虽然这是有益的,谢谢,它并没有解决问题。数据绑定不是问题,当我运行Update()功能在适配器上时是dosnt工作 – baked 2011-03-22 14:10:06

+0

@baked当你运行Update()from Leave时,数据集已经用新值更新了吗? – stuartd 2011-03-22 14:14:53

+0

@Stuart是的,它只是没有用(新更新的)数据集 – baked 2011-03-22 14:28:47

0

不知道这个问题是否仍然存在,我只是想贡献帮助我的东西。 DataSet,Databinding和Data在DataSet中发生了变化,但在数据库中发生了变化。我尝试了所有这些技巧,但似乎没有任何帮助。

DataSet.Data.Tables[0].Rows[0].EndEdit(); //0 for your Index/Tablename 

,帮助我,这样我就可以将数据绑定到数据集,然后,当我想更新数据,我把当前的数据集“EndEdit中()”每个表格。

我也tryed这一点:

foreach (Control bla in DisplayDict[SubTyp.ToString()].DataControlHelper.Values) 
{ 
    bla.BindingContext[DisplayDict[SubTyp.ToString()].DBData.Data].EndCurrentEdit(); 
} 

这让没有变化,我也tryed .GetChanges()和.HasChanges(),但.EndEdit()是一两件事在我的代码失踪。

我希望这可以帮助别人。

P.S.对不起我的英文不好,已经有一段时间了,因为我上次使用它(: