日期:2014-05-19  浏览次数:20890 次

treeview绑定数据可的例子
数据库里面有一个表,结构如:
  id       lch       dyh       name1  
  1         五层     501         ww
  2         七层     715         er   等等我想用树形结构将楼层,及对应的单元做成树形结构现在打算用treeview实现,请问怎么实现,只要实现马上给分!

如果有其他的简单办法也行,只要能实现这一个功能

------解决方案--------------------
递归就行了,不难滴,一个自动增长列
------解决方案--------------------
实现方式通过递归是最简单的,不过如果使用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.Catego