我自己写的一个,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);
}
}

解决方案 »

  1.   

    public delegate void OperNode(TreeNode node);
      

  2.   

    <iewc:treeview id="tvKind" runat="server" ImageUrl="../Images/folder1_16.gif" Width="264px" AutoPostBack="True" SelectedImageUrl="../Images/folder_open2_16.gif" ExpandedImageUrl="../Images/folder_open1_16.gif" ExpandLevel="2" SelectExpands="True" ShowToolTip="False"></iewc:treeview>
      

  3.   

    Microsoft.Web.UI.WebControls.dll怎样做出比较漂亮的效果?能举个例子吗?
      

  4.   

    代理很简单,比如:
    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