2

我正在使用 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(column) 从节点检索数据,但在执行时,IVirtualTreeListData.VirtualTreeGetCellValue 根本不会被调用。似乎节点用与列对应的数据填充一次,然后不再使用业务对象(好吧,也许数据也被设置,但在我的情况下不是)。

我将不胜感激任何见解。

4

1 回答 1

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 
}
于 2013-03-21T07:29:03.780 回答