【发布时间】:2019-10-31 08:38:43
【问题描述】:
我有 DevExpress cxGrid,我想获取相邻记录的 ID。我可以在以下用例中使用它们:用户删除焦点记录并将(网格视图)光标定位在相邻记录之一上(确定但网格视图的当前排序和分组顺序)。否则在删除记录和刷新网格视图后,网格光标的位置很难确定。
我进行了以下尝试,但它们不起作用 - Id 值是垃圾:
procedure GetAdjacentRecordIds(AView: TcxGridDBTableView; ACdFieldName: string; var APrevId, AId, ANextId: Integer);
var Item: TcxCustomGridTableItem;
RecIdx: Integer;
i, RecCount: Integer;
begin
APrevId:=-1;
AId:=-1;
ANextId:=-1;
if Trim(AIdFieldName)='' then Exit;
if not Assigned(AView) then Exit;
if not Assigned(AView.DataController) then Exit;
Item:=AView.DataController.GetItemByFieldName(UpperCase(AIdFieldName));
if not Assigned(Item) then Exit;
{//First attempt, didn't work, AId was the right one, but APrevId and ANextId were junk
RecIdx:=AView.DataController.FocusedRecordIndex;
AId:=AView.DataController.Values[RecIdx, Item.Index];
APrevId:=AView.DataController.Values[RecIdx-1, Item.Index];
ANextId:=AView.DataController.Values[RecIdx+1, Item.Index];}
//Second attempt, doesn't work, all three Ids are junk
RecIdx:=-1;
RecCount:=AView.ViewData.RecordCount;
for i:=0 to RecCount-1 do begin
if AView.ViewData.Records[i].Focused then begin
RecIdx:=1;
Break;
end;
end;
if RecIdx<0 then Exit;
AId:=AView.ViewData.Records[RecIdx].Values[Item.Index];
if RecIdx>0 then
APrevId:=AView.ViewData.Records[RecIdx-1].Values[Item.Index];
if RecIdx<RecCount then
ANextId:=AView.ViewData.Records[RecIdx+1].Values[Item.Index];
end;
如何更正此代码以获取相邻记录的字段值。或者也许我应该使用 Grid navigator 并在其上执行 prev/next,但我想找到不可见的值。并且 DataSet.DisableControls 可能会停止 Grid navigator?
【问题讨论】:
标签: delphi devexpress delphi-2009 tcxgrid