我已经看到,如果以另一种形式(也包括DataSet)更改数据,或者即使在服务器端(在触发器中或从另一个用户)更改了数据,也仅刷新当前行是一个问题。 因此,我找到了部分可与DevExpress的cxGrid配合使用的解决方案,并且存在以下问题。
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对象。 -如果选择另一条记录(上下滚动),然后再次选择此新记录,则根本无法聚焦。仅当我重新加载整个dataSet时,才能与其他任何记录一样选择该新记录。
干杯!
p.s。为了解决问题,我将提供整个测试项目。还有用于在数据库中创建表的SQL脚本,并且必须将AnyDac连接设置为“您的数据库”。 还有一张图片会/应该说明问题。
答案 0 :(得分:0)
您有电话亭,将更改保存到基础数据集。在finally
之前执行此操作。
tv01.DataController.Post();
有关更多详细信息,请参见TcxCustomDataController.Post的帮助。