如何在treeview中显示数据

时间:2014-08-19 10:05:21

标签: c# winforms treeview

Please follow the image

我想以上述格式显示数据。孩子的数量是动态的。我怎么能通过使用递归函数或任何简单的方法来实现它。

3 个答案:

答案 0 :(得分:1)

因为您没有指定数据格式,所以我只是说明了这个想法。伪代码:

class YourType
{
   public List<YourType> Childs;
   public string Name;
}

void recursiveMethod(List<YourType> parents)
{
  foreach(YourType parent in parents)
  {
    Node parentNode = new Node(parent.Name);
    treeView.Nodes.Add(parentNode);
    if(parent.Childs.Count > 0) //we have child nodes
      recursiveMethod(parent.Childs); //recursion
  }
}

答案 1 :(得分:0)

有各种方法可以做到这一点。您可以指定源,可以是依赖属性或可观察集合,并绑定到它,或者您可以在不绑定的情况下执行此操作。如果你能使你的问题更具描述性,那将会有所帮助。

http://social.msdn.microsoft.com/Forums/vstudio/en-US/49ce00c7-4d6d-4900-9fa3-a3913302b7bc/treeview-binding-with-generic-list

答案 2 :(得分:0)

以下是解决方案。事实上,它是

private TreeNode GenerateDataModel(TreeNode TrvNode, int PositionIndex) {
        foreach (var grpData in ApplicationManager.GetGroupingInfo().Where(x => x.PositionIndex == PositionIndex)) {
            string sectionQuery = Query + " Select Distinct(" + grpData.Fieldname + ") from DataTbl" +
                (TrvNode == null ? string.Empty : " where " + TrvNode.Tag.ToString()) +
                " order by " + grpData.Fieldname + " " + (grpData.OrderBy == GroupOrder.Descending ? "Desc" : string.Empty);
            appMgr.ExecuteQuery(sectionQuery);
            DataSet dSet = new DataSet();
            appMgr.GetData(ref dSet);

            foreach (DataRow dtRow in dSet.Tables[0].Rows) {
                string con = string.Empty;
                if (TrvNode != null)
                    con = TrvNode.Tag.ToString() + " And ";

                TreeNode trvNode = new TreeNode() {
                    Text = dtRow[grpData.Fieldname].ToString(),
                    Tag = con + grpData.Fieldname + "='" + dtRow[grpData.Fieldname].ToString() + "'"
                };

                TreeNode retTreeNode = GenerateDataModel(trvNode, PositionIndex + 1);
                if (TrvNode == null)
                    trvGroupDataModel.Nodes.Add(trvNode);
                else {
                    TrvNode.Nodes.Add(trvNode);
                }
            }
        }

        return TrvNode;
    }

这里的PositionIndex只是排序顺序索引。 对于前者

Select * from <Table> Order by P1 Desc, P2, P2

P1,P2和P3以0,1和2索引形式表示。

enter image description here