2013-03-21 37 views
2

我正在使用XtraTreeList.TreeList來顯示分層數據。數據存儲在實現DevExpress.XtraTreeList.TreeList.IVirtualTreeListData的自定義業務對象中。如何從XtraTreeList.TreeList中的節點檢索數據?

雖然列「名稱」的數據被正常地顯示,通過下面的代碼retirieved:

public void VirtualTreeGetCellValue(DevExpress.XtraTreeList.VirtualTreeGetCellValueInfo info) 
{ 
    if (info.Column.FieldName == "Name") 
     info.CellData = root.providers[provGroup.Key]; 
    if (info.Column.FieldName == "ImageIndex") 
     info.CellData = imageIndex; 
} 

我在爲節點提供適當的圖像索引遇到了困難。

簡而言之,我不知道如何提供它。我曾嘗試在設定的TreeList到ImageIndexFieldName「圖像索引」和處理CustomDrawNodeImages事件是這樣的:

void BoundTree_CustomDrawNodeImages(object sender, DevExpress.XtraTreeList.CustomDrawNodeImagesEventArgs e) 
{ 
    e.StateImageIndex = e.StateImageIndex = (int)(e.Node.GetValue("ImageIndex")??-1); 
    e.Handled = false; 
} 

但是這不會產生任何結果。

我想要做的是檢索我的對象實現與節點對應的IVirtualTreeListData,但是怎麼做到這一點?在文檔中,建議使用Node.GetValue(column)從節點檢索數據,但是當它被執行時,IVirtualTreeListData.VirtualTreeGetCellValue不會被調用。看起來,節點只填充一次與列對應的數據,然後業務對象不再使用(好吧,也許數據也被設置,但在我的情況下不是這樣)。

我將不勝感激任何見解。

回答

4

如果你有Node您可以通過使用treeControl.GetDataRecordByNode(e.Node)

在你範例中得到底層數據源就應該是這樣的:

private void BoundTree_CustomDrawNodeImages(object sender, DevExpress.XtraTreeList.CustomDrawNodeImagesEventArgs e) 
{ 
    var myType = (MyType)BoundTree.GetDataRecordByNode(e.Node); 
    e.StateImageIndex = myType.ImageIndex ?? -1 
}