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
на вид вашей сетки в начале и конце кода.