RecordIndex超出范围 - DevExpress

时间:2013-11-28 10:56:21

标签: delphi devexpress quantumgrid

我遇到了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等等的检查:有没有定位,没有FindKey或类似的东西。

正如我所说,没有直接涉及的记录选择(虽然不确定DevExpress网格内部发生了什么......)但我不明白为什么会出现这样的错误。

任何人都对可能发生的事情有了明确的想法?

非常感谢!

1 个答案:

答案 0 :(得分:0)

AFAICS此方法仅更改DataSource组件的TcxDBMemo。罪魁祸首必须在其他地方,很可能是一些event

作为调试它的第一步,我会尝试在代码开头和结尾的网格视图中使用BeginUpdateEndUpdate