Я работаю на портативном устройстве с использованием C # .Net против базы данных SqlCe. У меня есть форма с несколькими панелями, каждая панель имеет свою группу элементов управления текстовым полем. Когда форма построена, я автоматически привязываю каждый элемент управления textbox к соответствующему имени столбца из таблицы, которую я запрашиваю из базы данных. Пример: txtFld1 = ResultTable.Fld1, txtFld2 = ResultTable.Fld2 и т. Д. Все это работает без проблем. Если я запрашиваю у таблицы заданный идентификатор записи, форма обновляется без проблем. Если я нажимаю кнопку в форме и вручную изменяю значение одной строки в таблице одного или нескольких полей, форма не отражает эти изменения ... Например:
DataRow oDR = MySQLResultTable.Rows[0];
oDR["Fld1"] = "Something";
oDR["Fld2"] = "else";
oDR["Fld3"] = "changed";
3 поля в форме не отражают эти измененные значения. Однако, если я ввожу данные в определенные поля, значения помещаются обратно в соответствующую строку данных объекта MySQLResultTable, Row [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 и связывания.
НТН