Обновить одну строку в cxGrid - PullRequest
0 голосов
/ 25 октября 2018

Я видел проблему с обновлением только текущей строки, если данные изменяются в другой форме (и DataSet тоже) или даже если данные изменяются на стороне сервера (в триггере или от другого пользователя).Поэтому я нахожу решение, которое частично работает с cxGrid DevExpress и имеет следующую проблему.

  frm:=TfrmEdb01.Create(Self);    // create edit-form
  try
    frm.LoadData(0);              // do the insert in TAdQuery
    frm.ShowModal;                // Show edit form

    // after closing an Edit-Form, make a new record in cxGrid
    row:=tv01.dataController.InsertRecord(tv01.Controller.FocusedRecordIndex);

    // for each column in grid...
    for col:=0 to tv01.DataController.ItemCount-1 do
    begin
      // ...get its FieldName
      sFld:=tv01.DataController.GetItemFieldName(col);
      // and if this field exist in edit-form's Query
      if frm.q01.FindField(sFld)<>nil then
      //then assign this value to the newly created row in the grid.
        tv01.DataController.Values[row,col]:=frm.q01.FieldByName(sFld).Value;
    end;
  finally
    frm.Free;
  end;

И действительно, когда я выхожу из формы редактирования, в cxGrid создается новая строка.Проблема в том, что: - если дважды щелкнуть (чтобы снова открыть форму редактирования), тогда открывается предыдущая запись.Мне кажется, что данные фактически не обновлялись в объекте Query, только в GridView ... возможно, мне следует использовать значения из Grid вместо объекта Query.- если выбрать другую запись (прокрутить их вверх и вниз), а затем снова захотеть выбрать эту новую запись, то она вообще не может быть сфокусирована.Только если я перезагружу весь набор данных, тогда эту новую запись можно будет выбрать так же, как и любую другую.

Приветствия!

ps Чтобы прояснить проблему, я предоставлю целый тест-проект.Существует также сценарий SQL для создания таблицы в базе данных, и соединение AnyDac должно быть установлено на вашу базу данных.Существует также изображение, которое будет / должно проиллюстрировать проблему.

Issue ilustration

1 Ответ

0 голосов
/ 25 октября 2018

У вас есть запись вызова, чтобы сохранить изменения в базовом наборе данных.Сделайте это непосредственно перед finally.

tv01.DataController.Post();

См. Справку для TcxCustomDataController.Post для получения дополнительной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...