2010-03-03 62 views
4

我如何表示以下分層數據? 應該使用什麼控件,如果可能的話,將會有所幫助。代表分層數據.net winforms

-node 
-----node1 - -data--data --data 
-------------node111 -- data -- data 
-------------node112 -- data -- data 
-------------node113 -- data -- data 
-----node2 - -data--data --data 
-------------node1121 -- data -- data 
-----node3 - -data--data --data 

如果可能我需要把大部分的單元格放在幾個圖標上。

我發現本教程Link,有人可以支持我更多的信息嗎?

如果是的話,那可能嗎?

非常感謝。

+0

這裏的一個關鍵問題可能是:你是否在尋找一個在代碼中定義「純數據結構」的答案:獨立於任何現有的WinForms控件或第3個。黨的控制。或者,你是否願意接受使用現有或第三方案的答案。黨控制?同樣,請參閱我對Lokey的回答的評論。 – BillW 2010-03-04 14:36:26

回答

2

內置的Windows Forms控件對此並不好。你真正想要的是一個樹型網格混合控制(AKA多列樹視圖或TreeList)。

DevExpress有一個XtraTreeList,這是我使用的(不是免費的),可能是最接近你要求的。 Telerik的GridView也可以以分層的方式顯示網格數據,如果你設置了正確的分組。

如果價格過於陡峭,您可以嘗試FlexibleTreeView。或者如果你迫切需要免費的東西,看看這個CodeProject頁面:Advanced TreeView for .NET。這將是一個很多比商業產品更古怪和難以使用,但它會做的工作。

請注意,我假設數據是統一的,您基本上想要爲層次結構中的每個節點顯示相同的數據。如果數據是異構的(完全不同的列取決於節點或級別的類型),實際上您想要使用的是分層GridView。您可以從上面列出的相同發佈商那裏獲得這些信息。我不知道任何一半體面的免費版本。

1

使用TreeView控件

+0

如何在treeview控件中,我可以在每個節點中放置幾個​​圖標?並將其與gridcontol? – 2010-03-03 17:25:05

1

一種方式是創建一個派生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月最後更新:它的功能非常豐富,如果與商業組件相比,毫不遜色。