protected Microsoft.Web.UI.WebControls.TreeView tv_Menu;
protected DataTable dt1,dt2;

private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
if(!Page.IsPostBack)
{
TVBind();
}
} public void TVBind()
{
InitRootNodeDataTable();
InitTreeRootNode(tv_Menu.Nodes);
tv_Menu.ExpandLevel = 1 ;
if(tv_Menu.Nodes.Count > 0)
{
   tv_Menu.Nodes[0].Expanded = true;
}
} private void InitRootNodeDataTable()
{
string SqlSentence = "select * from forums_Class where ClassParentId=0";
dt1 =  Base.GetDataTable(SqlSentence); 
dt1.TableName = "TreeView1";
}
        
/// <summary>
/// 初始化 ChildNode DataTable
/// </summary>
private void InitChildNodeDataTable(int ClassParentID)
{
string SqlSentence = "select * from forums_Class where ClassParentId="+ClassParentID.ToString().Trim();
dt2 = Base.GetDataTable(SqlSentence); 
dt2.TableName = "TreeView2";
} /// <summary>
/// 初始化TreeView 的 RootNode
/// </summary>
private void InitTreeRootNode(TreeNodeCollection TNC)
{
DataView dataView  = new DataView();
dataView    = dt1.Copy().DefaultView;
//dataView.RowFilter = "ClassParentID = ClassID";
            int i=0;
foreach(DataRowView drv in dataView)
{
TreeNode tn    = new TreeNode();
tn.ID    = drv["ClassId"].ToString();
tn.Text    = drv["ClassName"].ToString();
tn.ImageUrl    = "bg_menu.gif";
tn.NavigateUrl = "http://main.aspx?id="+drv["ClassId"].ToString();
tn.Target      = "mainFrame";
//TNC.Add(tn);
tv_Menu.Nodes.AddAt(i++,tn);

InitChildNodeDataTable(Int32.Parse(tn.ID.ToString()));
InitTreeChildNode(tn.Nodes,tn.ID);
}
dt1 = null;
dt2 = null;
}
/// <summary>
/// 初始化TreeView 的 ChildNode
/// </summary>
private void InitTreeChildNode(TreeNodeCollection TNC,string classParentID)
{
DataView dataView  = new DataView();
dataView    = dt2.Copy().DefaultView ;
dataView.RowFilter = "ClassParentId = " + classParentID.Trim() + "";
foreach(DataRowView drv in dataView)
{
TreeNode tn    = new TreeNode();
tn.ID    = drv["ClassID"].ToString();
tn.Text    = drv["ClassName"].ToString();
//tn.ImageUrl    = GetIcon(drv["ClassType"].ToString(),_imagepath);
tn.NavigateUrl = "http://main.aspx?id="+drv["ClassId"].ToString();
tn.Target      = "mainFrame";
//TNC.Add(tn);
tv_Menu.Nodes.Add(tn);
InitTreeChildNode(tn.Nodes,tn.ID);
}
}

解决方案 »

  1.   

    代码混乱ing 呵呵给你看看我的实现方法:
    con.Open();
    str_Sql="select * from PE_Class where ChannelID=1 order by RootID,OrderID ";
    SqlCommand cmd = new SqlCommand(str_Sql,con);
    dr=cmd.ExecuteReader(); if(!this.IsPostBack)
    {
    this.UpdateTime.Value=System.DateTime.Now.ToString();

    //初始化arrShowLine 不能放在循环体里面
    //arrShowLine 功能:循环体第i次循环判断,如果i=false,显示"│",否则显示"&nbsp;"
    bool[] arrShowLine=new bool[21];
    for(int i=0;i<arrShowLine.Length;i++)
    {
    arrShowLine[i]=false;
    }

    //添加特定Item时这样绑定(这里添加多一个“无(做为一级栏目)”的选择,不在数据库读取的)
    //且根据接收的Depth判断他的深度
    //ddlParentID.Items.Add(new ListItem("无(做为一级栏目)","0"));
    while ( dr.Read() ) 

    string ClassValue;
    if((int)dr["Child"]>0)
    {
    ClassValue="0";
    }
    else if (dr["LinkUrl"].ToString()!="")
    {
    ClassValue="";
    }
    else
    {
    ClassValue=dr["ClassID"].ToString();
    }
    if(dr[0] is System.DBNull)
    {
    ddlClassID.Items.Add(new ListItem("请先添加栏目",""));
    }
    else
    {
    int tmpDepth=(int)dr["Depth"];
    //调用arrShowLine
    int tmpNextID=(int)dr["NextID"];
    if (tmpNextID>0)
    {
    arrShowLine[tmpDepth]=true;
    }
    else
    {
    arrShowLine[tmpDepth]=false;
    }
    //子栏目输出方式
    if (tmpDepth>0)
    {
    string strTemp="";
    for(int i=1;i<tmpDepth+1;i++)
    {
    strTemp=strTemp+"&nbsp;&nbsp;";
    if(i==tmpDepth)
    {
    if((int)dr["NextID"]>0)
    {
    strTemp=strTemp+"├&nbsp;";
    }
    else
    {
    strTemp=strTemp+"└&nbsp;";
    }
    }
    else
    {
    if (arrShowLine[i]==true)
    //输入if (i==3)表示第三次循环显示"│",可以试一下
    {
    strTemp=strTemp+"│";
    }
    else
    {
    strTemp=strTemp+"&nbsp;";
    }
    }
    }
    strTemp=strTemp+dr["ClassName"].ToString(); //判断是否外部连接
    if (dr["LinkUrl"].ToString()!="")
    {
    strTemp=strTemp+"(外)";
    }
    //
    ddlClassID.Items.Add(new ListItem(HttpUtility.HtmlDecode(strTemp),ClassValue ));
    }
    //跟栏目输出方式
    else
    {
    //判断是否外部连接
    if (dr["LinkUrl"].ToString()!="")
    {
    ddlClassID.Items.Add(new ListItem(dr["ClassName"].ToString()+"(外)",ClassValue ));
    }
    else
    {
    ddlClassID.Items.Add(new ListItem(dr["ClassName"].ToString(),ClassValue ));
    }
    }
    }
    }

    }
    con.Close();
    }