2013-03-21 2 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; 
} 

Я встречался с трудностями в обеспечении соответствующего индекса изображения для узлов.

Проще говоря, я понятия не имею, как его обеспечить. Я попытался установить ImageIndexFieldName в TreeList к «ImageIndex» и обработки 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 (столбец) для извлечения данных из узла, но когда он выполняется, IVirtualTreeListData.VirtualTreeGetCellValue просто не вызывается. Кажется, что узлы заполняются один раз данными, соответствующими столбцам, а затем бизнес-объект используется не более (ну, может быть, данные также заданы, но не в моем случае).

Буду признателен за понимание.

ответ

4

Если у вас есть Node вы можете получить основной DataSource с помощью 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 
}