RecordIndex вне допустимого диапазона - DevExpress

У меня возникают проблемы с сеткой 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 ...), и я не понимаю, почему я получаю такую ​​ошибку.

У кого-нибудь есть блестящее представление о том, что может происходить?

Большое спасибо!


person Andrea Raimondi    schedule 28.11.2013    source источник
comment
AFAICS этот метод изменяет только DataSource компонента TcxDBMemo. Виновник должен быть где-то еще и, скорее всего, это кто-то event. В качестве первого шага для его отладки я бы попытался использовать BeginUpdate и EndUpdate на view вашей сетки в начале и конце кода.   -  person Guillem Vicens    schedule 28.11.2013
comment
@GuillemVicens, вы были абсолютно правы. Не могли бы вы опубликовать приведенный выше комментарий в качестве ответа, чтобы я мог подтвердить это как решение? Спасибо.   -  person Andrea Raimondi    schedule 28.11.2013
comment
конечно, только что сделал это. Рад, что смог помочь. :-)   -  person Guillem Vicens    schedule 29.11.2013


Ответы (1)


AFAICS этот метод изменяет только DataSource компонента TcxDBMemo. Виновник должен быть где-то еще и, скорее всего, это кто-то event.

В качестве первого шага для его отладки я бы попытался использовать BeginUpdate и EndUpdate в представлении вашей сетки в начале и в конце кода.

person Guillem Vicens    schedule 29.11.2013