【问题标题】:Populate TreeView with DataRow使用 DataRow 填充 TreeView
【发布时间】:2017-04-18 19:54:21
【问题描述】:

如何在树形视图中添加项目?对于一个 DataRow,它包含父项作为一列,其余列是子节点。行结构如下。

表格 - 人物

column1 - SSN (text)

column2 - Name (text)

column3 - Age (int)

column4 - country (text)

column5 - height (double)

当您单击/展开名称时,它如下所示。

(-) 名称

- Age

- Country

- Height

每一行都会像上面的 TreeView 一样显示。 如何在 TreeView 中填充它?该行中的 3 列是 Name 列的子节点(父节点)。我只使用 C# 和 .Net 4.5 和 Winform 应用程序。我已经设法连接到数据库。只需要用 DataRowCollection 填充 TreeView。

这是尝试实现上述想法的示例代码。

private void FillDataInTree(DataRowCollection rows)
    {
        foreach(DataRow r in rows)
        {
            TreeNode[] cNodes = new TreeNode[3];
            for(int i=0; i<3; i++)
            {
                cNodes[i].Text = r[i + 1].ToString();
            }
            TreeNode node = new TreeNode(r["pName"].ToString(), cNodes);
            playerTreeView.Nodes.Add(node);
            //playerTreeView.Nodes
        }
    }

【问题讨论】:

  • 你能告诉我们你的尝试吗?
  • SSN 栏目呢?
  • SSN 列为主键,不显示在 TreeView 数据中。

标签: c# .net winforms treeview


【解决方案1】:

循环应该是这样的

foreach (DataRow row in rows)
{
    TreeNode node = playerTreeView.Nodes.Add(row.Field<string>("SSN"), row.Field<string>("Name"));
    node.Nodes.Add(row.Field<int>("Age").ToString());
    node.Nodes.Add(row.Field<string>("Country"));
    ....
}

【讨论】:

    【解决方案2】:

    使用.Nodes.Add() 创建名称节点的子节点:

    private void FillDataInTree( DataRowCollection rows )
    {
        foreach( DataRow r in rows )
        {
            TreeNode node = new TreeNode( r["pName"].ToString() );
            playerTreeView.Nodes.Add( node );
    
            for( int i = 0; i < 3; i++ )
                node.Nodes.Add( r[i + 1].ToString() );
        }
    }
    

    我同意@Steve 的观点,即按名称检索字段比按索引更好。

    【讨论】:

    • @Francesco,你试过这个吗?它解决了你的问题吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-09
    • 1970-01-01
    相关资源
    最近更新 更多