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 に答える