我自己写的一个,c# #region 动态构建TreeView
/// <summary>
/// 构造树
/// </summary>
/// <param name="tableName">数据表名</param>
/// <param name="keyField">主键字段名</param>
/// <param name="parentField">父编号字段名</param>
/// <param name="showField">显示字段名</param>
/// <param name="rootName">根节点名</param>
/// <param name="tv">待构造的树</param>
protected void BindTree(string tableName,string keyField,string parentField,string showField,string rootName,ref TreeView tv)
{
tv.Nodes.Clear();
DataTable dt = new DataTable();
string mySql = "select "+keyField+","+parentField+","+showField+" from "+tableName;
using (KY_BASE.DataAccess myDA = new KY_BASE.DataAccess())
{
dt = myDA.ExeTable(mySql);
}
TreeNode root = new TreeNode();
root.ID = "0";//
root.Text = rootName;
tv.Nodes.Add(root);
DataRow[] rows = dt.Select(parentField+" = '0'");
for(int i=0;i<rows.Length;i++)
{
BindLowerTree(dt,keyField,rows[i][keyField].ToString(),parentField,showField,rows[i][showField].ToString(),root,ref tv);
}
} protected void BindLowerTree(DataTable dt,string keyField,string keyValue,string parentField,string showField,string showValue,TreeNode myNode,ref TreeView tv)
{
TreeNode node = new TreeNode();
node.ID = keyValue;
node.Text = showValue;
myNode.Nodes.Add(node);
DataRow[] rows = dt.Select(parentField+"='"+keyValue+"'");
for (int i=0;i<rows.Length;i++)
{
BindLowerTree(dt,keyField,rows[i][keyField].ToString(),parentField,showField,rows[i][showField].ToString(),node,ref tv);
}
} /// <summary>
/// 遍历节点
/// </summary>
/// <param name="nodeID"></param>
/// <param name="tnc"></param>
/// <param name="tv"></param>
protected void OperNodeByID(string nodeID,OperNode oper,TreeNodeCollection tnc,ref TreeView tv)
{
foreach(TreeNode node in tnc)
{
if (node.ID ==nodeID)
{
oper(node);
break;
}
if(node.Nodes.Count!=0)
OperNodeByID(nodeID,oper,node.Nodes,ref tv);
}
}
/// <summary>
/// 构造树
/// </summary>
/// <param name="tableName">数据表名</param>
/// <param name="keyField">主键字段名</param>
/// <param name="parentField">父编号字段名</param>
/// <param name="showField">显示字段名</param>
/// <param name="rootName">根节点名</param>
/// <param name="tv">待构造的树</param>
protected void BindTree(string tableName,string keyField,string parentField,string showField,string rootName,ref TreeView tv)
{
tv.Nodes.Clear();
DataTable dt = new DataTable();
string mySql = "select "+keyField+","+parentField+","+showField+" from "+tableName;
using (KY_BASE.DataAccess myDA = new KY_BASE.DataAccess())
{
dt = myDA.ExeTable(mySql);
}
TreeNode root = new TreeNode();
root.ID = "0";//
root.Text = rootName;
tv.Nodes.Add(root);
DataRow[] rows = dt.Select(parentField+" = '0'");
for(int i=0;i<rows.Length;i++)
{
BindLowerTree(dt,keyField,rows[i][keyField].ToString(),parentField,showField,rows[i][showField].ToString(),root,ref tv);
}
} protected void BindLowerTree(DataTable dt,string keyField,string keyValue,string parentField,string showField,string showValue,TreeNode myNode,ref TreeView tv)
{
TreeNode node = new TreeNode();
node.ID = keyValue;
node.Text = showValue;
myNode.Nodes.Add(node);
DataRow[] rows = dt.Select(parentField+"='"+keyValue+"'");
for (int i=0;i<rows.Length;i++)
{
BindLowerTree(dt,keyField,rows[i][keyField].ToString(),parentField,showField,rows[i][showField].ToString(),node,ref tv);
}
} /// <summary>
/// 遍历节点
/// </summary>
/// <param name="nodeID"></param>
/// <param name="tnc"></param>
/// <param name="tv"></param>
protected void OperNodeByID(string nodeID,OperNode oper,TreeNodeCollection tnc,ref TreeView tv)
{
foreach(TreeNode node in tnc)
{
if (node.ID ==nodeID)
{
oper(node);
break;
}
if(node.Nodes.Count!=0)
OperNodeByID(nodeID,oper,node.Nodes,ref tv);
}
}
解决方案 »
- WebDeploymentSetup.msi是干什么的?
- Java DES加密谁能转成c#的急,好了成上结帖
- 关于模板页和webform同时使用page_load事件
- 如何在客户端动态添加onclick(),onfocus这些事件
- 一个js 数值转换的问题
- 不用TryCatch的办法谁能告诉我在visual c#下面怎么判断一个字符串是不是日期?
- 急,特急!请大家帮帮我了。在线等候。
- 请教又一个datagrid问题
- 求大家帮我看看这一行数据绑定有何错误,这块我学得不太好
- 选中Datagrid中的某一行打开另一个页面,用datagrid 什么事件?
- 在使用VB.NET所编写的*.aspx页面,对于文框内的数字型类问题~~
- 怎样实现在线阅读?
public delegate void OperNode(TreeNode node);
protected void OperNodeByID(string nodeID,OperNode oper,TreeNodeCollection tnc,ref TreeView tv)
{
foreach(TreeNode node in tnc)
{
if (node.ID ==nodeID)
{
oper(node);
break;
}
if(node.Nodes.Count!=0)
OperNodeByID(nodeID,oper,node.Nodes,ref tv);
}
}
---------------------------------------------------------------------
private void AddNode(Microsoft.Web.UI.WebControls.TreeNode node)
{
//
}
private void btnAdd_Click(object sender, System.Web.UI.ImageClickEventArgs e)
{
//...
OperNode oper = new OperNode(AddNode);
OperNodeByID(txtParent.Value,oper,tvKind.Nodes,ref tvKind);
}
如果按text来查找的话,你就写一个方法来比较text和你传入的text是否相等,然后将其父结点全部Expand