У меня возникают проблемы с сеткой 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 ...), и я не понимаю, почему я получаю такую ошибку.
У кого-нибудь есть блестящее представление о том, что может происходить?
Большое спасибо!
DataSource
компонентаTcxDBMemo
. Виновник должен быть где-то еще и, скорее всего, это кто-тоevent
. В качестве первого шага для его отладки я бы попытался использоватьBeginUpdate
иEndUpdate
наview
вашей сетки в начале и конце кода. - person Guillem Vicens   schedule 28.11.2013