2013-11-28 21 views
0

我遇到了DevExpress VCL網格問題,拋出了「RecordIndex超出範圍」錯誤,儘管沒有直接調用該場景中網格的任何記錄函數。RecordIndex超出範圍 - DevExpress

我在做的事情很簡單:一旦記錄被改變(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

AFAICS此方法僅更改'TcxDBMemo'組件的'DataSource'。罪魁禍首必須在別處,最有可能是一些「事件」。作爲調試它的第一步,我會嘗試在代碼的開頭和結尾處的網格的'view'上使用'BeginUpdate'和'EndUpdate'。 –

+0

@GuillemVicens你是對的。 您可以將上述評論作爲答案發布,以便我可以確認該解決方案嗎? 謝謝。 –

+0

當然,只是做到了。很高興我能幫上忙。 :-) –

回答

0

AFAICS此方法僅更改TcxDBMemo組件的DataSource。罪魁禍首必須在其他地方,最有可能是event

作爲調試它的第一步,我會嘗試在代碼的開頭和結尾使用網格視圖上的BeginUpdateEndUpdate

+0

原來這對我來說是個詭計。 –