0

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 グリッド内で何が起こっているかはわかりません...)。なぜこのようなエラーが発生するのかわかりません。

何が起こっているのかについて素晴らしいアイデアを持っている人はいますか?

どうもありがとうございました!

4

1 に答える 1

0

AFAICS このメソッドDataSourceは、TcxDBMemoコンポーネントの のみを変更します。犯人は別の場所にいるに違いなく、おそらくいくつかのevent.

それをデバッグする最初のステップとして、コードの最初と最後にあるグリッドのビューでBeginUpdateandを使用しようとします。EndUpdate

于 2013-11-29T08:12:18.670 に答える