Привязка C # к таблице, обновление элементов управления при изменении содержимого строки данных - PullRequest
0 голосов
/ 10 марта 2010

Я работаю на портативном устройстве с использованием 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 и связывания.

НТН

1 Ответ

0 голосов
/ 10 марта 2010

Решено ... В любом случае, спасибо ... у него не было "MyTable.AcceptChanges ()" после обновления отдельных столбцов. AcceptChanges () фактически сбрасывает изменения обратно в связанный элемент управления TO.

...