数据库里面有一个表,结构如:
id lch dyh name1
1 五层 501 ww
2 七层 715 er 等等我想用树形结构将楼层,及对应的单元做成树形结构现在打算用treeview实现,请问怎么实现,只要实现马上给分!如果有其他的简单办法也行,只要能实现这一个功能
id lch dyh name1
1 五层 501 ww
2 七层 715 er 等等我想用树形结构将楼层,及对应的单元做成树形结构现在打算用treeview实现,请问怎么实现,只要实现马上给分!如果有其他的简单办法也行,只要能实现这一个功能
解决方案 »
- form窗体给某一网页传值?
- 在默认的设置下 SQL Server 不允许进行远程连接可能会导致此失败。
- 自定义控件的问题
- 异步本来就是多线程,可以支持多个用户同时连接,用异步写服务器还用在thread线程吗?
- DataGrid里边ComboBox实现特效问题????
- XSLT中怎么排序,order-by不行啊!
- 打印的问题(马上散分)!
- 请问C#中 try catch 的快捷输入方法
- 致所有"开始自学C#,一天争取帮人解决一个C#问题来提高。有问题尽管提! "参与者,结贴了。
- 有关水晶报表中table的ApplyLogOnInfo方法的一个简单问题
- 怎么用代码设置窗体中所有checkbox的Checked值都为false?
- 怎样完全Clone一个Object
注意这里可以活用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);
}
}
注意这里可以活用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);
}}
为了方便能见,