У меня есть DevExpress cxGrid, и я хотел бы получить идентификаторы смежных записей. Я могу использовать их в следующем случае: пользователь удаляет сфокусированную запись, и я помещаю курсор (вид сетки) на одну из смежных записей (как определено, но текущий порядок сортировки и группировки вида сетки). В противном случае положение курсора сетки плохо определяется после удаления записи и после обновления вида сетки.
Я сделал следующие попытки, но они не работают - значения 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-навигатор и сделать предыдущий / следующий на нем, но я хотел бы найти значения в невидимыхА DataSet.DisableControls может остановить Grid-навигатор?