treeview的问题 在数据库里有这样的一张表:tree,是这样定义的id pid name1 1 aa1 11 bb1 12 cc12 121 dd12 122 ee要生成aa bb cc dd ee这样的一个树提供的思路啊!最好有源代码 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 public void bindtreeview(TreeView treeview, bool isExpand, string sSelectedData) { DataTable dataTable = GetDir().Tables[0]; treeview.Nodes.Clear(); DataRow[] rowlist = dataTable.Select("FarentID='1'"); if (rowlist.Length <= 0) return; //创建根接点 TreeNode rootnode = new TreeNode(); //设置根接点属性 rootnode.Text = rowlist[0]["name"].ToString(); //设置根接点的key值 rootnode.Value = rowlist[0]["DirID"].ToString(); rootnode.Expanded = isExpand; rootnode.Selected = true; //添加根接点 treeview.Nodes.Add(rootnode); //创建其他接点 CreateChildNode(rootnode, dataTable, isExpand, sSelectedData); } private void CreateChildNode(TreeNode parentNode, DataTable dataTable, bool isExpanded, string sSelectdeData) { DataRow[] rowlist = dataTable.Select("FarentID='" + parentNode.Value + "'"); foreach (DataRow row in rowlist) { //创建新接点 TreeNode node = new TreeNode(); //设置接点属性 node.Text = row["name"].ToString(); node.Value = row["id"].ToString(); node.Expanded = isExpanded; if (node.Value == sSelectdeData) { node.Selected = true; } parentNode.ChildNodes.Add(node); //递归调用 ,创建其他接点 CreateChildNode(node, dataTable, isExpanded, sSelectdeData); } } [★] VS2005[C#] B/S C/S 运用递归 动态绑定树 =========今天无意当中翻到了 以前用VS2005 开发的 B/S 动态绑定树的例子..还是自己的笔记好.一下子 就看懂了..马上又开发了一个 C/S 结构的供大家参考..前面发过 2 篇关于树的例子..资源管理器还不错..另外一篇就差了..但是对初学者来说 非常好理解..另外 B/S 树会刷新..C/S 树也会刷新...为了不让它刷新..添加,修改.删除 节点的时候..树和数据库是独立的..,就是不用先操作数据库,然后重新绑定..2者独立操作. 运用BeginUpdate() he EdnUpdate() 防止树刷新...递归绑定树这种方法只适合 一个表总的某一列引用自己的主键的情况..C/S: //创建根节点 public void BindCategoryTreeVew(TreeView treeView, bool isExpanded, string sSelectedData) { //将获取的数据转换为 一个DataTable DataTable dt=GetCategorys().Tables[0]; treeView.Nodes.Clear();//清空 树的所有节点 //获取与排序顺序中的筛选器以及指定的状态相匹配的所有System.Data.DataRow 数组 DataRow []rowlist=dt.Select("ParentID='-1'"); if (rowlist.Length <= 0) return; //创建跟节点 TreeNode rootNode = new TreeNode(); //设置根节点的属性 rootNode.Text = rowlist[0]["Desn"].ToString(); //设置根节点的值 rootNode.Text = rowlist[0]["CategoryID"].ToString(); rootNode.Expanded = isExpanded; rootNode.Selected = true; //添加跟节点 CategoryView.Nodes.Add(rootNode); CreateChildNode(rootNode, dt, isExpanded, sSelectedData); } private void CreateChildNode(TreeNode parentNode, DataTable dt, bool isExpanded, string sSelecedData) { //选择数据,添加排序表达市 DataRow [] rowList = dt.Select("ParentID=" + Convert.ToInt32(parentNode.Value)); foreach (DataRow row in rowList) { //创建一个新的节点了 TreeNode node = new TreeNode(); node.Text = row["Desn"].ToString(); node.Value = row["CategoryID"].ToString(); node.Expanded = isExpanded; if (node.Value == sSelecedData) { node.Selected = true; } parentNode.ChildNodes.Add(node); //递归调用,创建其他节点 CreateChildNode(node,dt,isExpanded,sSelecedData); } }B/S: //创建根节点 public void BindCategoryTreeVew(TreeView treeView, bool isExpanded, string sSelectedData) { //将获取的数据转换为 一个DataTable DataTable dt=GetCategorys().Tables[0]; treeView.Nodes.Clear();//清空 树的所有节点 //获取与排序顺序中的筛选器以及指定的状态相匹配的所有System.Data.DataRow 数组 DataRow []rowlist=dt.Select("ParentID='-1'"); if (rowlist.Length <= 0) return; //创建跟节点 TreeNode rootNode = new TreeNode(); //设置根节点的属性 rootNode.Text = rowlist[0]["Desn"].ToString(); //设置根节点的值 rootNode.value = rowlist[0]["CategoryID"].ToString(); rootNode.Expanded = isExpanded; rootNode.Selected = true; //添加跟节点 CategoryView.Nodes.Add(rootNode); CreateChildNode(rootNode, dt, isExpanded, sSelectedData); } private void CreateChildNode(TreeNode parentNode, DataTable dt, bool isExpanded, string sSelecedData) { //选择数据,添加排序表达市 DataRow [] rowList = dt.Select("ParentID=" + Convert.ToInt32(parentNode.Value)); foreach (DataRow row in rowList) { //创建一个新的节点了 TreeNode node = new TreeNode(); node.Text = row["Desn"].ToString(); node.Value = row["CategoryID"].ToString(); node.Expanded = isExpanded; if (node.Value == sSelecedData) { node.Selected = true; } parentNode.ChildNodes.Add(node); //递归调用,创建其他节点 CreateChildNode(node,dt,isExpanded,sSelecedData); } } c#写的winform程序无故自动关闭不报错,求教! Dev控件TimeEdit用法 Win7 Sendmessage连接摄像头提示选择video device,怎样去掉提示? 菜鸟关于vs2008的一些小问题 类继承出现一个很奇怪的问题,高人指教 工作9年了,想换换工作 怎样在某一时刻让程序自动删除数据库中的一列内容 WinForm程序中怎么读取DataGrid的列数 如何求两个list的差集 用C#写网站还要懂什么语言呢?比如VBScript或JAVAScript? C#中如何在C/S系统中对Access进行增删改操作 窗体问题
{
DataTable dataTable = GetDir().Tables[0];
treeview.Nodes.Clear();
DataRow[] rowlist = dataTable.Select("FarentID='1'");
if (rowlist.Length <= 0)
return;
//创建根接点
TreeNode rootnode = new TreeNode();
//设置根接点属性
rootnode.Text = rowlist[0]["name"].ToString();
//设置根接点的key值
rootnode.Value = rowlist[0]["DirID"].ToString();
rootnode.Expanded = isExpand;
rootnode.Selected = true;
//添加根接点
treeview.Nodes.Add(rootnode);
//创建其他接点
CreateChildNode(rootnode, dataTable, isExpand, sSelectedData);
} private void CreateChildNode(TreeNode parentNode, DataTable dataTable, bool isExpanded, string sSelectdeData)
{
DataRow[] rowlist = dataTable.Select("FarentID='" + parentNode.Value + "'");
foreach (DataRow row in rowlist)
{
//创建新接点
TreeNode node = new TreeNode();
//设置接点属性
node.Text = row["name"].ToString();
node.Value = row["id"].ToString();
node.Expanded = isExpanded;
if (node.Value == sSelectdeData)
{
node.Selected = true;
}
parentNode.ChildNodes.Add(node);
//递归调用 ,创建其他接点
CreateChildNode(node, dataTable, isExpanded, sSelectdeData);
}
}
=========
今天无意当中翻到了 以前用VS2005 开发的 B/S 动态绑定树的例子..
还是自己的笔记好.一下子 就看懂了..马上又开发了一个 C/S 结构的供大家参考..
前面发过 2 篇关于树的例子..资源管理器还不错..另外一篇就差了..
但是对初学者来说 非常好理解..另外 B/S 树会刷新..C/S 树也会刷新...为了不让它刷新..添加,修改.删除 节点的时候..树和数据库是独立的..,
就是不用先操作数据库,然后重新绑定..
2者独立操作. 运用BeginUpdate() he EdnUpdate() 防止树刷新...递归绑定树
这种方法只适合 一个表总的某一列引用自己的主键的情况..
C/S:
//创建根节点
public void BindCategoryTreeVew(TreeView treeView, bool isExpanded, string sSelectedData)
{
//将获取的数据转换为 一个DataTable
DataTable dt=GetCategorys().Tables[0];
treeView.Nodes.Clear();//清空 树的所有节点
//获取与排序顺序中的筛选器以及指定的状态相匹配的所有System.Data.DataRow 数组
DataRow []rowlist=dt.Select("ParentID='-1'");
if (rowlist.Length <= 0) return;
//创建跟节点
TreeNode rootNode = new TreeNode();
//设置根节点的属性
rootNode.Text = rowlist[0]["Desn"].ToString();
//设置根节点的值
rootNode.Text = rowlist[0]["CategoryID"].ToString();
rootNode.Expanded = isExpanded;
rootNode.Selected = true;
//添加跟节点
CategoryView.Nodes.Add(rootNode);
CreateChildNode(rootNode, dt, isExpanded, sSelectedData); }
private void CreateChildNode(TreeNode parentNode, DataTable dt, bool isExpanded, string sSelecedData)
{
//选择数据,添加排序表达市
DataRow [] rowList = dt.Select("ParentID=" + Convert.ToInt32(parentNode.Value));
foreach (DataRow row in rowList)
{
//创建一个新的节点了
TreeNode node = new TreeNode();
node.Text = row["Desn"].ToString();
node.Value = row["CategoryID"].ToString();
node.Expanded = isExpanded;
if (node.Value == sSelecedData)
{
node.Selected = true;
}
parentNode.ChildNodes.Add(node);
//递归调用,创建其他节点
CreateChildNode(node,dt,isExpanded,sSelecedData);
}
}
B/S:
//创建根节点
public void BindCategoryTreeVew(TreeView treeView, bool isExpanded, string sSelectedData)
{
//将获取的数据转换为 一个DataTable
DataTable dt=GetCategorys().Tables[0];
treeView.Nodes.Clear();//清空 树的所有节点
//获取与排序顺序中的筛选器以及指定的状态相匹配的所有System.Data.DataRow 数组
DataRow []rowlist=dt.Select("ParentID='-1'");
if (rowlist.Length <= 0) return;
//创建跟节点
TreeNode rootNode = new TreeNode();
//设置根节点的属性
rootNode.Text = rowlist[0]["Desn"].ToString();
//设置根节点的值
rootNode.value = rowlist[0]["CategoryID"].ToString();
rootNode.Expanded = isExpanded;
rootNode.Selected = true;
//添加跟节点
CategoryView.Nodes.Add(rootNode);
CreateChildNode(rootNode, dt, isExpanded, sSelectedData); }
private void CreateChildNode(TreeNode parentNode, DataTable dt, bool isExpanded, string sSelecedData)
{
//选择数据,添加排序表达市
DataRow [] rowList = dt.Select("ParentID=" + Convert.ToInt32(parentNode.Value));
foreach (DataRow row in rowList)
{
//创建一个新的节点了
TreeNode node = new TreeNode();
node.Text = row["Desn"].ToString();
node.Value = row["CategoryID"].ToString();
node.Expanded = isExpanded;
if (node.Value == sSelecedData)
{
node.Selected = true;
}
parentNode.ChildNodes.Add(node);
//递归调用,创建其他节点
CreateChildNode(node,dt,isExpanded,sSelecedData);
}
}