【问题标题】:How To Add Root Node In Tree View Dynamically Using Asp.net如何使用 Asp.net 在树视图中动态添加根节点
【发布时间】:2013-04-22 04:31:43
【问题描述】:

我想将DataTable绑定到TreeView。我编写了以下代码。它目前正在工作,意味着它显示了DataTable的所有数据但没有根节点。

 List<DocumentData> lstData = GetSPDocuments();
    gvDocuments.DataSource = lstData;
    gvDocuments.DataBind();

    DataTable dt = ConvertToDataTable(lstData);

    TreeNode node1 = new TreeNode("Root");


    foreach (DataRow r in dt.Rows)
    {
        int nodeLvl = int.Parse(r["ID"].ToString());
        string nodeParent = "Folders";
        string nodeName = r["Title"].ToString();


        TreeNode tNode = new TreeNode(nodeName);

        ht.Add(nodeLvl.ToString() + nodeName, tNode);

        if (tvDocs.Nodes.Count == 0)
            tvDocs.Nodes.Add(tNode);
        else
        {
            nodeLvl--;
            tvDocs.Nodes.Add(tNode);               
        }
    }

这里如何添加静态根节点???请帮忙!

【问题讨论】:

    标签: c# asp.net datatable treeview


    【解决方案1】:

    试试这个可能对你有帮助。

     protected void Page_Load(object sender, EventArgs e)
        {
            conStr = ConfigurationManager.ConnectionStrings["conString"].ConnectionString;
            conn = new OleDbConnection(conStr);
            BindTreeViewControl();
        }
    
        private void BindTreeViewControl()
        {
            try
            {
                DataSet ds = GetDataSet("Select ProductId,ProductName,ParentId from ProductTable");
                DataRow[] Rows = ds.Tables[0].Select("ParentId = 0"); 
    
                for (int i = 0; i < Rows.Length; i++)
                {
                    TreeNode root = new TreeNode(Rows[i]["ProductName"].ToString(), Rows[i]["ProductId"].ToString());
                    root.SelectAction = TreeNodeSelectAction.Expand;
                    CreateNode(root, ds.Tables[0]);
                    treeviwExample.Nodes.Add(root);
                }
            }
            catch (Exception Ex) { throw Ex; }
        }
    
        public void CreateNode(TreeNode node, DataTable Dt)
        {
            DataRow[] Rows = Dt.Select("ParentId =" + node.Value);
            if (Rows.Length == 0) { return; }
            for (int i = 0; i < Rows.Length; i++)
            {
                TreeNode Childnode = new TreeNode(Rows[i]["ProductName"].ToString(), Rows[i]["ProductId"].ToString());
                Childnode.SelectAction = TreeNodeSelectAction.Expand;
                node.ChildNodes.Add(Childnode);
                CreateNode(Childnode, Dt);
            }
        }
        private DataSet GetDataSet(string Query)
        {
            DataSet Ds = new DataSet();
            try
            {
                OleDbDataAdapter da = new OleDbDataAdapter(Query, conn);
                da.Fill(Ds);
            }
            catch (Exception dex) { }
            return Ds;
        }
    

    这个的数据库结构是

    【讨论】:

    • 在我的示例中,我没有将根节点保存在数据库中。我可以从代码中将它添加为静态根节点吗???
    • 以 TreeNode root= new TreeNode("your root") 的身份执行此操作,然后在我的情况下,我正在执行 treeviwExample.Nodes.Add(your rootnode);但更好的是在数据库中给出 parentid =0 并选择根节点作为 ds.Tables[0].Select("ParentId = 0");我认为这将是更好的方法。
    【解决方案2】:
    // Suppress repainting the TreeView until all the objects have been created.
    treeView1.BeginUpdate();
    
    // Clear the TreeView each time the method is called.
    treeView1.Nodes.Clear();
    
    // create root node
    TreeNode root = new TreeNode("Root");
    
    // loop and add all child nodes to root node
    foreach (DataRow r in dt.Rows)
    {
        // create child node 
        // add to root node 
         root.Nodes.Add(child);
    }
    
    // add root node to tree view
    treeView1.Nodes.Add(root);
    
    // Begin repainting the TreeView.
    treeView1.EndUpdate();
    

    【讨论】:

      【解决方案3】:

      你有没有得到这个答案?你快到了。

      TreeView 控件的名称是什么?既然您从未说过,我使用的是treeView1,并修改了您的代码以包含以下内容:

      private TreeView treeView1;
      
      private void TreeView_DataBind() {
      
        treeView1.Nodes.Clear();
      
        List<DocumentData> lstData = GetSPDocuments();
        gvDocuments.DataSource = lstData;
        gvDocuments.DataBind();
      
        DataTable dt = ConvertToDataTable(lstData);
      
        TreeNode node1 = new TreeNode("Root");
      
        treeView1.Nodes.Add(node1); // this is the step you missed
      
        foreach (DataRow r in dt.Rows)
        {
          int nodeLvl = int.Parse(r["ID"].ToString());
          string nodeParent = "Folders";
          string nodeName = r["Title"].ToString();
      
          TreeNode tNode = new TreeNode(nodeName);
      
          ht.Add(nodeLvl.ToString() + nodeName, tNode);
      
          if (tvDocs.Nodes.Count == 0)
            tvDocs.Nodes.Add(tNode);
          else
          {
            nodeLvl--;
            tvDocs.Nodes.Add(tNode);               
          }
        }
      
        node1.Expand();
      
      }
      

      简单易懂!

      【讨论】:

        猜你喜欢
        • 2011-10-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多