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