【发布时间】:2012-10-16 22:51:00
【问题描述】:
我在 WinForms 应用程序中进行简单的表格编辑时遇到问题。我一定是错过了一步。
我有一个DataSet,其中包含一个DataTable,它通过SqlDataAdapter 连接到一个数据库。 SqlDataAdapter 上有一个 SqlCommandBuilder。在表单上,有TextBoxes 绑定到DataTable。绑定是在 Designer 中完成的,其机器生成的语句如下:
this.tbLast.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.belkData, "belk_mem.last", true));
当我在DataTable 中填写行时,数据库中的值会出现在文本框中,但是当我更改TextBox 的内容时,更改显然不会转到DataTable。当我尝试保存更改时,以下两个都返回 null:
DataTable dtChanges = dtMem.GetChanges();
DataSet dsChanges = belkData.GetChanges();
我忘记了什么?
编辑 - 回复mrlucmorin:
保存在一个按钮下。代码是:
BindingContext[belkData, "belk_mem"].EndCurrentEdit();
try
{
DataSet dsChanges = belkData.GetChanges();
if (dsChanges != null)
{
int nRows = sdaMem.Update(dsChanges);
MessageBox.Show("Row(s) Updated: " + nRows.ToString());
belkData.AcceptChanges();
}
else { MessageBox.Show("Nothing to save.", "No changes"); }
}
catch (Exception ex)
{
MessageBox.Show("Error: " + ex.Message);
}
我已经尝试在不改变行为的情况下放入这些语句:
dtMem.AcceptChanges();
belkData.AcceptChanges();
【问题讨论】:
-
请告诉我们您的“保存”方法是如何触发的
-
在您的 TextBox.Validate 事件上添加一个处理程序以确保它通过验证。默认的 DataSourceUpdateMode 是 OnValidation,因此除非您将其更改为 None,否则应在 TextBox Validates 时推送数据
标签: c# winforms data-binding