C#绑定到表,在数据行内容更改时刷新表单控件

C#绑定到表,在数据行内容更改时刷新表单控件,c#,data-binding,refresh,C#,Data Binding,Refresh,我正在使用C#.Net和SqlCe数据库开发一个手持设备。我有一个有多个面板的表单,每个面板都有自己的一组文本框控件。构建表单时,我自动将每个textbox控件绑定到从数据库查询的表中与其匹配的列名。例如:txtFld1=resultable.Fld1,txtFld2=resultable.Fld2,等等。所有这些工作都没有问题。如果我在表中查询给定的记录ID,则表单刷新没有问题。如果单击表单上的按钮并手动更改一个或多个字段表中单行的值,则表单不会反映这些更改。。。例: DataRow oDR

我正在使用C#.Net和SqlCe数据库开发一个手持设备。我有一个有多个面板的表单,每个面板都有自己的一组文本框控件。构建表单时,我自动将每个textbox控件绑定到从数据库查询的表中与其匹配的列名。例如:txtFld1=resultable.Fld1,txtFld2=resultable.Fld2,等等。所有这些工作都没有问题。如果我在表中查询给定的记录ID,则表单刷新没有问题。如果单击表单上的按钮并手动更改一个或多个字段表中单行的值,则表单不会反映这些更改。。。例:

DataRow oDR = MySQLResultTable.Rows[0];
oDR["Fld1"] = "Something";
oDR["Fld2"] = "else";
oDR["Fld3"] = "changed";
表单上的3个字段不反映这些更改的值。但是,如果我键入特定字段,则这些值将被推回mysqlresultable的相应数据行,即行[0]对象

我错过了什么

谢谢

由于我确定了控件的名称并在表中找到了相应的列名,因此使用了简化的格式

public void BindControlsToDataTable(Control Page, DataTable oTbl )
{
   String cObjName;
   foreach (Control oCtrl in Page.Controls)
   {
      // if this control has other controls, bind them too...
      if (oCtrl.Controls.Count > 0)
         BindControlsToDataTable(oCtrl, oTbl);

      // Now, try to do dynamic binding.  The controls are created
      // based on a 3 char prefix such as "txt", "cbo", "chk", etc
      // with the remainder as the object name they represent...
      // ex: txtDescription, txtFirstName, txtLastName, chkIsOk, etc..
      cObjName = oCtrl.Name.Substring(3);
      if (oTbl.Columns[lcName] != null)
      {
         oCtrl.DataBindings.Clear();
         // we are binding the "TEXT" property of the control
         // to the column name in the table/row
         oCtrl.DataBindings.Add("Text", oTbl, cObjName,true, 
             DataSourceUpdateMode.OnPropertyChanged);
      }
   }
}
同样,如果我的文本框字段是txtMyFld1,表中相应的列名是MyFld1,它们将自动配对。我在初始化表单并准备/运行第一个查询以填充DataTable对象和绑定后调用它


HTH已解决。。。无论如何谢谢你。。。更新单个列后,他没有“MyTable.AcceptChanges()”。AcceptChanges()实际上会将更改刷新回绑定到源代码管理。

您能在问题中添加数据绑定初始化代码吗?