DevExpress VCL グリッドに問題があり、そのシナリオでグリッドのレコード関数を直接呼び出していないにもかかわらず、「RecordIndex out of range」エラーが発生します。
私がやっていることはかなり単純です: レコードが変更されると (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 グリッド内で何が起こっているかはわかりません...)。なぜこのようなエラーが発生するのかわかりません。
何が起こっているのかについて素晴らしいアイデアを持っている人はいますか?
どうもありがとうございました!