RecordIndex вне диапазона - DevExpress

У меня возникают проблемы с сеткой DevExpress VCL, из-за которой возникает ошибка "RecordIndex вне диапазона", несмотря на то, что я не вызываю напрямую функции записи сетки в этом сценарии.

То, что я делаю, довольно просто: после изменения записи (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 и т. Д.: Locate отсутствует, нет FindKey или что-то в этом роде.

Как я уже сказал, выбор записей напрямую не связан (хотя я не уверен, что происходит внутри сетки DevExpress...), и я не понимаю, почему я получаю такую ​​ошибку.

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

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

1 ответ

Решение

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

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

Другие вопросы по тегам