如何递归填充TreeView

9

我在数据库中有一张名为departments的表格,它具有以下字段:Id、Parent、Name、IsActive

如何最好地使用这些数据填充TreeView?

3个回答

21
您可以使用以下方法:
1. 从数据库中检索数据并将其转换为DataTable或List,将其称为dataList。
public void PopulateTree(ref TreeNode root,List<Department> departments)
{
    if(root==null)
    {
          root=new TreeNode();
          root.Text="Departments";
          root.Tag=null;
          // get all departments in the list with parent is null
          var details=departments.Where(t=>t.Parent==null);
          foreach(var detail in details)
          {
              var child= new TreeNode(){
                  Text=detail.Name,
                  Tage=detail.Id,
              };
              PopulateTree(ref child,departments);
              root.Nodes.Add(child);
          }      
    }
    else
    {
         var id=(int)root.Tag;
         var details=departments.Where(t=>t.Parent==id);
         foreach(var detail in details)
         {
              var child= new TreeNode(){
                  Text=detail.Name,
                  Tage=detail.Id,
              };
              PopulateTree(ref child,departments);
              root.Nodes.Add(child);
         }
    }
}

在“加载事件”中。
TreeNode root=null;
var departments=query from database
PopulateTree(ref root,departments);

希望这能对你有所帮助

祝好


0

imagelist 包含 9 张图片。

    private void grupAltGrup_Load(object sender, EventArgs e)
    {   DataTable dtt = veritabani.tablogonder("select id, ad from grup where parent=-1");

        TreeNode parent = new TreeNode();
        parent.Text = "Kök";
        parent.Tag = "-1";
        parent.ImageIndex = 0;

        treeView1.Nodes.Add(parent);


        for (int i = 0; i < dtt.Rows.Count; i++)
        {
            //       treeView1.Nodes.Add("Suppliers");
            TreeNode parent2 = new TreeNode();
            parent2.Text = dtt.Rows[i]["ad"].ToString();
            parent2.Tag = dtt.Rows[i]["id"].ToString(); 
            parent2.ImageIndex = 0;

            parent.Nodes.Add(parent2);
            treeviewDoldur(ref parent2,Convert.ToInt16(dtt.Rows[i]["id"]));
            //   child.Nodes.Add("Name: " + dtt.Rows[i]["id"].ToString());

        }

 int kacinciyavru = 1;
    void treeviewDoldur(ref TreeNode parent,int parentIdsi)
    {            DataTable yedek;
        yedek = veritabani.tablogonder("select id,ad from grup where parent=" + parentIdsi);
        for (int y = 0; y < yedek.Rows.Count; y++)
        {
            TreeNode child = new TreeNode();

            child.Text = yedek.Rows[y]["ad"].ToString();
            child.Tag = yedek.Rows[y]["id"].ToString();
            child.ImageIndex = kacinciyavru++;

           parent.Nodes.Add(child); 
            treeviewDoldur(ref child, Convert.ToInt16(yedek.Rows[y]["id"])); 

        }
        kacinciyavru--;
    }

0

这里是一段代码片段。现在你可以根据你的问题进行更改。

String strConn = "Server = .\\SQLEXPRESS;Database = Northwind;Integrated Security = SSPI;";
SqlConnection conn = new SqlConnection(strConn);
SqlDataAdapter da = new SqlDataAdapter("Select * from Products", conn);
SqlDataAdapter daCategories = new SqlDataAdapter("Select * from Categories", conn);
da.Fill(ds, "Products");
daCategories.Fill(ds, "Categories");
ds.Relations.Add("Cat_Product", ds.Tables["Categories"].Columns["CategoryID"], ds.Tables["Products"].Columns["CategoryID"]);
foreach(DataRow dr in ds.Tables["Categories"].Rows)
{
       TreeNode tn = new TreeNode(dr["CategoryName"].ToString());
       foreach (DataRow drChild in dr.GetChildRows("Cat_Product"))
       {
              tn.Nodes.Add(drChild["ProductName"].ToString());
       }
       treeView1.Nodes.Add(tn);
}

1
我认为这不是递归方法。 - user3354807

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接