Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从数据库填充TreeView_C#_Asp.net_Database_Webforms_Treeview - Fatal编程技术网

C# 从数据库填充TreeView

C# 从数据库填充TreeView,c#,asp.net,database,webforms,treeview,C#,Asp.net,Database,Webforms,Treeview,我有一个名为Topics的数据库表,其中包括以下字段: 托皮西德 名称 父ID 通过使用它们,我想在c中填充一个树视图。我该怎么做 提前谢谢…可能是这样的。如果您需要更多,请详细说明您到底想做什么 //In Page load foreach (DataRow row in topics.Rows) { TreeNode node = new TreeNode(dr["name"], dr["topicId"]) node.PopulateOnDemand = true;

我有一个名为Topics的数据库表,其中包括以下字段:

托皮西德 名称 父ID 通过使用它们,我想在c中填充一个树视图。我该怎么做


提前谢谢…

可能是这样的。如果您需要更多,请详细说明您到底想做什么

//In Page load
foreach (DataRow row in topics.Rows)
{
    TreeNode node = new TreeNode(dr["name"], dr["topicId"])
    node.PopulateOnDemand = true;

     TreeView1.Nodes.Add(node);
 }
 ///
 protected void PopulateNode(Object sender, TreeNodeEventArgs e)
 {
     string topicId = e.Node.Value;
     //select from topic where parentId = topicId.
     foreach (DataRow row in topics.Rows)
     {
         TreeNode node = new TreeNode(dr["name"], dr["topicId"])
         node.PopulateOnDemand = true;

         e.Node.ChildNodes.Add(node);
     }

 }
不完全是

处理树的最佳方法通常是不要一次加载所有可以加载的内容。因此,需要获取没有parentID的根节点或主题。然后将它们添加到trees根节点,然后对于添加的每个节点,需要获取其子节点

foreach (DataRow row in topicsWithOutParents.Rows)
{
   TreeNode node = New TreeNode(... whatever);
   DataSet childNodes = GetRowsWhereParentIDEquals(row["topicId"]);
   foreach (DataRow child in childNodes.Rows)
   { 
       Treenode childNode = new TreeNode(..Whatever);
       node.Nodes.add(childNode);
   }
   Tree.Nodes.Add(node);
}

若并没有大量数据,那个么对于子节点/子节点,连接数据库、获取数据并一次又一次地添加到treeview节点是不好的。它可以一次完成。见以下示例:

这段代码对我来说运行得非常好,请查看,我认为它将帮助您:

)


这段代码对我来说运行得很好。我认为它可能对希望在树视图中显示层次数据的人有用。到目前为止,我想这是最简单的。请检查一下,如果对你有帮助,请投票

参考:

C代码:

 //dtTree  should be accessible in both page load and AddNodes()
    //DocsMenu is the treeview Id
          DataTable dtTree = new DataTable(); 
//declare your connection string
                protected void Page_Load(object sender, EventArgs e)
                {
                    //DataTable dtTree = new DataTable();
                    using (con)
                    {
                        con.Open();

                        string sQuery = "Select topicId,parentid,name from tbl_topicMaster";
                        SqlCommand cmd = new SqlCommand(sQuery, con);
                        cmd.CommandType = CommandType.Text;
                        SqlDataAdapter da = new SqlDataAdapter(cmd);
                        da.Fill(dtTree);
                        da.Dispose();
                        con.Close();
                    }

                    AddNodes(-1, DocsMenu.Nodes);
                }




                void AddNodes(int id, TreeNodeCollection tn)
                {
                    foreach (DataRow dr in dtTree.Select("parentid= " + id))
                    {
                        TreeNode sub = new TreeNode(dr["name"].ToString(), dr["topicId"].ToString());
                        tn.Add(sub);
                        AddNodes(Convert.ToInt32(sub.Value), sub.ChildNodes);
                    }
                }
aspx代码:

<asp:TreeView ID="DocsMenu" runat="server" ImageSet="BulletedList" 
        NodeIndent="15"  >  
                    <HoverNodeStyle Font-Underline="True" ForeColor="#6666AA" />
                    <NodeStyle Font-Names="Tahoma" Font-Size="8pt" ForeColor="Black" HorizontalPadding="2px"  
                        NodeSpacing="0px" VerticalPadding="2px"></NodeStyle>  
                    <ParentNodeStyle Font-Bold="False" />  
                    <SelectedNodeStyle BackColor="#B5B5B5" Font-Underline="False" HorizontalPadding="0px"  
                        VerticalPadding="0px" />
                                 </asp:TreeView> 

老帖子,但是很有用。无论如何,在单击节点时如何获取值?干杯
 //dtTree  should be accessible in both page load and AddNodes()
    //DocsMenu is the treeview Id
          DataTable dtTree = new DataTable(); 
//declare your connection string
                protected void Page_Load(object sender, EventArgs e)
                {
                    //DataTable dtTree = new DataTable();
                    using (con)
                    {
                        con.Open();

                        string sQuery = "Select topicId,parentid,name from tbl_topicMaster";
                        SqlCommand cmd = new SqlCommand(sQuery, con);
                        cmd.CommandType = CommandType.Text;
                        SqlDataAdapter da = new SqlDataAdapter(cmd);
                        da.Fill(dtTree);
                        da.Dispose();
                        con.Close();
                    }

                    AddNodes(-1, DocsMenu.Nodes);
                }




                void AddNodes(int id, TreeNodeCollection tn)
                {
                    foreach (DataRow dr in dtTree.Select("parentid= " + id))
                    {
                        TreeNode sub = new TreeNode(dr["name"].ToString(), dr["topicId"].ToString());
                        tn.Add(sub);
                        AddNodes(Convert.ToInt32(sub.Value), sub.ChildNodes);
                    }
                }
<asp:TreeView ID="DocsMenu" runat="server" ImageSet="BulletedList" 
        NodeIndent="15"  >  
                    <HoverNodeStyle Font-Underline="True" ForeColor="#6666AA" />
                    <NodeStyle Font-Names="Tahoma" Font-Size="8pt" ForeColor="Black" HorizontalPadding="2px"  
                        NodeSpacing="0px" VerticalPadding="2px"></NodeStyle>  
                    <ParentNodeStyle Font-Bold="False" />  
                    <SelectedNodeStyle BackColor="#B5B5B5" Font-Underline="False" HorizontalPadding="0px"  
                        VerticalPadding="0px" />
                                 </asp:TreeView>