如何从XtraTreeList.TreeList中的节点检索数据?

时间:2013-03-21 07:12:46

标签: c# treeview devexpress

我正在使用XtraTreeList.TreeList来显示分层数据。数据存储在实现DevExpress.XtraTreeList.TreeList.IVirtualTreeListData的自定义业务对象中。

当“名称”列的数据正常显示时,请通过以下代码重新提供:

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设置为“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。似乎节点用对应于列的数据填充一次,然后业务对象不再被使用(好吧,也许数据也被设置,但在我的情况下不是。)

我将非常感激任何见解。

1 个答案:

答案 0 :(得分: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 
}