Я видел проблему с обновлением только текущей строки, если данные изменяются в другой форме (и 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](https://i.stack.imgur.com/MOv9r.png)