해당 시나리오에서 그리드의 레코드 기능을 직접 호출하지는 않았지만 "RecordIndex out of range"오류가 발생하여 DevExpress VCL 그리드에 문제가 있습니다.RecordIndex가 범위를 벗어났습니다 - DevExpress
내가하고있는 일은 상당히 간단하다. 일단 레코드가 변경되면 (AfterScroll) 메소드가 호출된다. 이 방법에서는 새 레코드의 필드에 따라 데이터 소스와 데이터 이름을 할당하는 다른 메서드를 호출합니다.
코드는 매우 간단하며 다음과 같이 간다 : 패널 보여처럼
procedure TValidatedOrders.UpdateDispenseNotes;
var Dataset : TDataSet;
GroupTypeFieldName : String;
DataSource : TDataSource;
DataFieldName : String;
GroupType : Integer;
procedure SetSpecsDataSource;
begin
DataSource := DMValidatedDispense.DSDispenseGroupSpecs;
DataFieldName := 'GLAZING_INSTRUCTIONS';
end;
procedure SetCLsDataSource;
begin
DataSource := DMValidatedDispense.DSDispenseGroupCLs;
DataFieldName := 'WEAR_INSTRUCTIONS';
end;
begin
// Step 1: Get the group type
If GetTopPage = cTopPageOrders Then
Dataset := DMValidatedDispense.CDSLabOrders
Else
Dataset := DMValidatedDispense.CDSLabDispenses;
GroupType := Dataset.FieldByName('GROUP_TYPE').AsInteger;
// Step 2: Assign the MemoDispenseNotes data binding appropriately
If GetTopPage = cTopPageOrders Then
Begin
case GroupType of
cOrderGroupSpecs, cOrderGroupFrame,
cOrderGroupLens, cOrderGroupGlazing: SetSpecsDataSource;
cOrderGroupCLs: SetCLsDataSource;
else SetSpecsDataSource;
end;
End
Else
Begin
case GroupType of
cDispenseGroupSpecs: SetSpecsDataSource;
cDispenseGroupCLs: SetCLsDataSource;
else SetSpecsDataSource;
end;
End;
MemoDispenseNotes.DataBinding.DataSource := DataSource;
MemoDispenseNotes.DataBinding.DataField := DataFieldName;
end;
이라고 위의 방법은 여기보고 너무 긴 원래의 코드, 어쨌든 그것은/숨기기의 검사를 물건을 포함 .FieldByName ('GROUP_TYPE') 유형 .AsInteger = SomeValue 등 : 찾기가 없거나 FindKey가 없거나 이와 유사한 항목이 없습니다.
내가 말했듯이, 직접 관련된 레코드 선택이 없습니다. (여기에 DevExpress 그리드 내부에서 무슨 일이 일어나는지는 확실하지 않습니다 ...) 나는 왜 그런 오류가 발생하는지 보지 못합니다.
아무도 무슨 일이 벌어 질 수 있는지에 대한 훌륭한 생각이 있습니까?
대단히 감사합니다!
AFAICS이 방법은'TcxDBMemo' 구성 요소의'DataSource' 만 변경합니다. 범인은 다른 곳에 있어야하며 아마도 가장 중요한 사건 일 것이다. 그것을 디버깅하는 첫 번째 단계로서 나는 코드 시작과 끝에서 그리드의'view'에'BeginUpdate'와'EndUpdate'를 사용하려고합니다. –
@GuillemVicens 당신은 절대적으로 옳았습니다. 위의 의견을 답으로 게시하여 솔루션으로 확인할 수 있습니까? 감사합니다. –
확실합니다. 다행히 도울 수있어. :-) –