我正在使用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。似乎节点用对应于列的数据填充一次,然后业务对象不再被使用(好吧,也许数据也被设置,但在我的情况下不是。)
我将非常感激任何见解。
答案 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
}