数据库里面有一个表,结构如:
 id   lch   dyh   name1 
 1    五层  501    ww
 2    七层  715    er 等等我想用树形结构将楼层,及对应的单元做成树形结构现在打算用treeview实现,请问怎么实现,只要实现马上给分!如果有其他的简单办法也行,只要能实现这一个功能

解决方案 »

  1.   

    能给我发个例子么,email:[email protected]
      

  2.   

    实现方式通过递归是最简单的,不过如果使用Stack来进行也没有问题。你可以把表的数据装载到DataTable。然后通过DataTable来筛选数据生成TreeNode加入到TreeView。
    注意这里可以活用TreeNode.Tag属性,用来包含相关DataRow的数据。
    以下是我的一个程序的代码供参考:
    表结构的关键列如下:
    CategoryID 主键 int类型。
    CategoryName nvarchar(32)类型。
    ParentID 外键 int 类型。-----------------
    方式一:非递归加载数据
            public static void LoadCategoryData(TreeView treeView/*,DataTable dt*/)
            {
                DataTable dt = new DataTable();
                DocumentController.GetInstance().FillCategories(dt);            Stack<TreeNode> stack = new Stack<TreeNode>();            treeView.BeginUpdate();
                //add rootNode
                TreeNode rootNode = new TreeNode("文档管理", 0, 0);
                treeView.Nodes.Add(rootNode);
                //add childNodes            
                //TreeNode parentNode = rootNode;
                //添加一级分类
                foreach (DataRow cateRow in dt.Select("ParentID IS NULL"))
                {
                    Category category = new Category(cateRow);
                    TreeNode node = new TreeNode(category.CategoryName, 1, 2);
                    node.Tag = category;
                    rootNode.Nodes.Add(node);
                    stack.Push(node);
                }
                while (stack.Count > 0)//添加一级分类下面的子分类
                {
                    TreeNode parentNode = stack.Pop();
                    int id = ((Category)parentNode.Tag).CategoryID;
                    foreach (DataRow cateRow in dt.Select("ParentID = " + id.ToString()))
                    {
                        Category category = new Category(cateRow);
                        TreeNode childNode = new TreeNode(category.CategoryName, 1, 2);
                        childNode.Tag = category;
                        parentNode.Nodes.Add(childNode);
                        stack.Push(childNode);
                    }
                }            treeView.Nodes[0].Expand();
                treeView.EndUpdate();
            }方式二:递归方式
    //递归方式
    private static void LoadCategoryDataToTreeView()
    {
    this.treeView1.BeginUpdate();
    //this.treeView1.Nodes.Clear();
    //生成根节点
    CategoryTreeNode rootNode = new CategoryTreeNode(ApplicationGlobal.Instance.ApplicationSettings.CategoryRootNodeName,0,0);//技巧分类
    rootNode.CategoryData = null;
    this.treeView1.Nodes.Add(rootNode);
    //添加一级分类
    foreach(DataSetSR.CategoriesRow cateRow in DataSettings.Instance.Data.Categories.Select("ParentId = 0"))
    {
    CategoryTreeNode tnode = new CategoryTreeNode(cateRow.CategoryName,1,2);
    tnode.CategoryData = cateRow;
    rootNode.Nodes.Add(tnode);

    foreach(DataSetSR.CategoriesRow subcateRow in DataSettings.Instance.Data.Categories.Select("ParentId = " + cateRow.CategoryId))
    {
    BindSubCategoryTreeNode(tnode,subcateRow);
    }
    }
    this.treeView1.ExpandAll();
    this.treeView1.EndUpdate();
    }
            //递归函数
    private static void BindSubCategoryTreeNode(TreeNode treeNode,DataSetSR.CategoriesRow cateRow)
    {
    CategoryTreeNode tnode = new CategoryTreeNode(cateRow.CategoryName,1,2);
    tnode.CategoryData = cateRow;
    treeNode.Nodes.Add(tnode);
    foreach(DataSetSR.CategoriesRow subcateRow in DataSettings.Instance.Data.Categories.Select("ParentId = " + cateRow.CategoryId))
    {
    BindSubCategoryTreeNode(tnode,subcateRow);
    }

    }
      

  3.   

    /********实现方式通过递归是最简单的,不过如果使用Stack来进行也没有问题。你可以把表的数据装载到DataTable。然后通过DataTable来筛选数据生成TreeNode加入到TreeView。
    注意这里可以活用TreeNode.Tag属性,用来包含相关DataRow的数据。
    以下是我的一个程序的代码供参考:
    表结构的关键列如下:
    CategoryID 主键 int类型。
    CategoryName nvarchar(32)类型。
    ParentID 外键 int 类型。-----------------
    方式一:非递归加载数据
    ******/
      public static void LoadCategoryData(TreeView treeView/*,DataTable dt*/)
      {
      DataTable dt = new DataTable();
      DocumentController.GetInstance().FillCategories(dt);  Stack<TreeNode> stack = new Stack<TreeNode>();  treeView.BeginUpdate();
      //add rootNode
      TreeNode rootNode = new TreeNode("文档管理", 0, 0);
      treeView.Nodes.Add(rootNode);
      //add childNodes  
      //TreeNode parentNode = rootNode;
      //添加一级分类
      foreach (DataRow cateRow in dt.Select("ParentID IS NULL"))
      {
      Category category = new Category(cateRow);
      TreeNode node = new TreeNode(category.CategoryName, 1, 2);
      node.Tag = category;
      rootNode.Nodes.Add(node);
      stack.Push(node);
      }
      while (stack.Count > 0)//添加一级分类下面的子分类
      {
      TreeNode parentNode = stack.Pop();
      int id = ((Category)parentNode.Tag).CategoryID;
      foreach (DataRow cateRow in dt.Select("ParentID = " + id.ToString()))
      {
      Category category = new Category(cateRow);
      TreeNode childNode = new TreeNode(category.CategoryName, 1, 2);
      childNode.Tag = category;
      parentNode.Nodes.Add(childNode);
      stack.Push(childNode);
      }
      }  treeView.Nodes[0].Expand();
      treeView.EndUpdate();
      }//方式二:递归方式
    //递归方式
    private static void LoadCategoryDataToTreeView()
    {
    this.treeView1.BeginUpdate();
    //this.treeView1.Nodes.Clear();
    //生成根节点
    CategoryTreeNode rootNode = new CategoryTreeNode(ApplicationGlobal.Instance.ApplicationSettings.CategoryRootNodeName,0,0);//技巧分类
    rootNode.CategoryData = null;
    this.treeView1.Nodes.Add(rootNode);
    //添加一级分类
    foreach(DataSetSR.CategoriesRow cateRow in DataSettings.Instance.Data.Categories.Select("ParentId = 0"))
    {
    CategoryTreeNode tnode = new CategoryTreeNode(cateRow.CategoryName,1,2);
    tnode.CategoryData = cateRow;
    rootNode.Nodes.Add(tnode);foreach(DataSetSR.CategoriesRow subcateRow in DataSettings.Instance.Data.Categories.Select("ParentId = " + cateRow.CategoryId))
    {
    BindSubCategoryTreeNode(tnode,subcateRow);
    }
    }
    this.treeView1.ExpandAll();
    this.treeView1.EndUpdate();
    }
      //递归函数
    private static void BindSubCategoryTreeNode(TreeNode treeNode,DataSetSR.CategoriesRow cateRow)
    {
    CategoryTreeNode tnode = new CategoryTreeNode(cateRow.CategoryName,1,2);
    tnode.CategoryData = cateRow;
    treeNode.Nodes.Add(tnode);
    foreach(DataSetSR.CategoriesRow subcateRow in DataSettings.Instance.Data.Categories.Select("ParentId = " + cateRow.CategoryId))
    {
    BindSubCategoryTreeNode(tnode,subcateRow);
    }}
    为了方便能见,