一種方式是創建一個派生TreeNode對象,迫使它包含List<data>
:
// requires declaration of : using System.Windows.Forms;
// sample data class
public class data
{
public string Name;
public int ID;
}
public class XTreeNode : TreeNode
{
List<data> theData = new List<data>();
public XTreeNode(string theNodeID)
{
this.Text = theNodeID;
}
public void addData(data newData)
{
theData.Add(newData);
}
}
這裏是建築的一個實例的(不優雅)樣本上述數據結構可能看起來像(上一個WinForm):假設你有一個TreeView,名爲「爲TreeView1的形式:
XTreeNode currentNode;
data currentData;
for (int i = 0; i < 10; i++)
{
// create the node and add it to the 'treeView1
currentNode = new XTreeNode(i.ToString());
treeView1.Nodes.Add(currentNode);
// add some data entries to the List<data> of the derived TreeNode
currentData = new data {Name = "one", ID = 100};
currentNode.addData(currentData);
currentData = new data { Name = "two", ID = 200 };
currentNode.addData(currentData);
currentData = new data { Name = "three", ID = 300 };
currentNode.addData(currentData);
// sample of adding a child node
currentNode.Nodes.Add(new XTreeNode((i * 100).ToString()));
}
有關的問題,如何喲您將直觀地顯示與每個節點關聯的List<data>
:通常的方法是將Treeview與ListView組合起來,並同步它們的位置和項目高度:然後在與相應的TreeNode相同的「行」上顯示List<data>
。
當然,您可以實現您自己的Node和NodeCollection實體,這些實體完全獨立於任何控件:此示例展示了一個依賴.NET控件的混合大小寫來充當數據結構和呈現機制。
在CodeProject上有一個很好的組合TreeView/ListView的例子,多年來一直保持,更新和擴展:Phillip Piper's:"A Much Easier to Use ListView",2006年首次發佈,2009年10月最後更新:它的功能非常豐富,如果與商業組件相比,毫不遜色。
這裏的一個關鍵問題可能是:你是否在尋找一個在代碼中定義「純數據結構」的答案:獨立於任何現有的WinForms控件或第3個。黨的控制。或者,你是否願意接受使用現有或第三方案的答案。黨控制?同樣,請參閱我對Lokey的回答的評論。 – BillW 2010-03-04 14:36:26