【问题标题】:How to make Treeview recursive?如何使 Treeview 递归?
【发布时间】:2017-04-09 09:12:24
【问题描述】:

我有以下代码在 Treeview 中填充数据。我怎样才能使它递归,以便我将有多个层? 目前显示如下,但我想将其显示为三层。

Here is how it looks like right now

但我正在寻找,比如说,bomitem= '500101' && bomrev='B'

      500101
       ----100200
       ----300255
            ----100214


 treeView2.Nodes.Clear();
            SqlCommand cmd = new SqlCommand("select * from BOMDETAIL ORDER BY partId", cn);
            try
            {
                SqlDataReader dr = cmd.ExecuteReader();
                while(dr.Read())
                {
                    TreeNode node = new TreeNode(dr["bomItem"].ToString());
                    node.Nodes.Add(dr["partId"].ToString());
                    //node.Nodes.Add(dr["qty"].ToString());
                    node.Nodes.Add(dr["bomRev"].ToString());
                    treeView2.Nodes.Add(node);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

Table View

【问题讨论】:

    标签: c# sql-server wpf recursion treeview


    【解决方案1】:

    你在寻找这样的东西吗?

    private void button_Click(object sender, EventArgs e)
    {
          treeView2.Nodes.Clear();
          SqlCommand cmd = new SqlCommand("select * from BOMDETAIL ORDER BY partId", cn);
          try
          {
              SqlDataReader dr = cmd.ExecuteReader();
              SomeFun(dr, treeView2);
          }
    
         catch (Exception ex)
         {
              MessageBox.Show(ex.Message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
         }    
    }
    
    private void SomeFun(SqlDataReader dr, TreeView treeView2)
    {
        if(dr.Read())
        {
           TreeNode node = new TreeNode(dr["bomItem"].ToString());
           node.Nodes.Add(dr["partId"].ToString();
           node.Nodes.Add(dr["bomRev"].ToString());
           treeView2.Nodes.Add(node);
           SomeFun(dr, treeView2);
        }
    }
    

    【讨论】:

    • 谢谢。当按钮 onclick() 事件时我如何调用这些
    • 你的代码在500101300255->100214下也显示相同的我想看到的300255 and 100200
    • bomRev 是 300255 还是 100200?
    • 300255 和 100200 是 partId,bomRev 是 A 和 B。bomRev and bomItem 是 PK
    • 您需要提供查询返回的列并说明每列的相关性
    【解决方案2】:

    我的建议 1. 创建名为 BOMDETAIL 的新类并创建类的属性,您在表中有多少列,每列都有一个属性,如 bomItem、partId 等... 2. 为该类前列表创建集合。并为 BOMDETAIL 类创建对象,并从 while 循环内的 dr 变量为每个属性分配值,每个 BOMDETAIL 类对象添加列表。

    例如:列表 lstBom = 新列表 while(dr.Read())

                   BOMDETAIL bom= new BOMDETAIL();
                    bom.bomItem = dr["bomItem"].ToString();
                        ....
                   lstBom.add(b);
    
    1. 现在您可以在 lstBom 中给定您想要的任何顺序,并分配给树视图节点集合对象或 ItemSource。

    感谢您的提问

    【讨论】:

      猜你喜欢
      • 2017-02-02
      • 2011-02-04
      • 2013-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-16
      • 1970-01-01
      相关资源
      最近更新 更多