ASP.NET TreeView树型菜单操作实例(代码调试通过)

时间:2022-03-09 13:00:45

本实例完成TreeView树型菜单添加,修改,删除,绑定DropDownList功能,移动功能读者可以自行书写
.aspx代码

<form id="Form1" method="post" runat="server">
   <FONT face="宋体">
    <TABLE id="Table1" cellSpacing="1" cellPadding="1"

width="700" border="1">
     <TR>
      <TD style="WIDTH: 168px"></TD>
      <TD>TreeView操作实例</TD>
     </TR>
     <TR>
      <TD style="WIDTH: 168px" vAlign="top">
       <iewc:TreeView id="TreeView1"

runat="server"></iewc:TreeView></TD>
      <TD vAlign="top">
       <TABLE id="Table2" cellSpacing="1"

cellPadding="1" width="100%" border="0">
        <TR>
         <TD>节点名
          <asp:TextBox

id="TextBox1" runat="server"></asp:TextBox></TD>
        </TR>
        <TR>
         <TD>
          <asp:Button

id="addButton" runat="server" Text="添 加"></asp:Button>
          <asp:Button

id="editButton" runat="server" Text="修 改"></asp:Button>
          <asp:Button

id="delButton" runat="server" Text="删 除"></asp:Button></TD>
        </TR>
        <TR>
         <TD>移动节点</TD>
        </TR>
        <TR>
         <TD>要移动到的节点
          

<asp:DropDownList id="DropDownList1" runat="server"></asp:DropDownList></TD>
        </TR>
        <TR>
         <TD>
          <asp:Button

id="moveButton" runat="server" Text="移 动"></asp:Button></TD>
        </TR>
       </TABLE>
      </TD>
     </TR>
     <TR>
      <TD style="WIDTH: 168px"></TD>
      <TD></TD>
     </TR>
    </TABLE>
   </FONT>
  </form>

.aspx.cs后台代码

protected Microsoft.Web.UI.WebControls.TreeView TreeView1; 
  public string returnvalue="";//递归存储值

 
  private void Page_Load(object sender, System.EventArgs e)
  {
   // 在此处放置用户代码以初始化页面
   if(!Page.IsPostBack){
    Button del=new Button();
    del=(Button)Page.FindControl("delButton");
    del.Attributes.Add("onclick","return confirm('确定删除');");
    showlist();
   }
  }

private void showlist(){
   //绑定TreeView
  //infobase io=new infobase();   
   DropDownList1.Items.Clear();
   ListItem list=new ListItem();
   list.Value="0";
   list.Text="全部类别";
   DropDownList1.Items.Add(list);
   DropDownListBind(0,DropDownList1);

   //添加根节点
   TreeView1.Nodes.Clear();
   TreeNode node=new TreeNode();
   node.Text="类别列表";
   node.Target="0";
   node.Expanded=true;
   TreeView1.Nodes.Add(node);   
   treeShow(0,node);
   TreeView1.DataBind();
  }

  private void DropDownListBind(int parterid,DropDownList droplist){//递归类别
   DataSet ds=returnDataset(parterid);
   if(ds!=null){
    for(int i=0;i<ds.Tables[0].Rows.Count;i++){
     ListItem list=new ListItem();
     if (ds.Tables[0].Rows[i]["depth"].ToString()=="0")
     {
      list.Text=ds.Tables[0].Rows[i]

["name"].ToString();
     }
     else{
      string depth="";
      //for(i=1;i<Int32.Parse(ds.Tables[0].Rows

[i]["depth"].ToString());i++){
       depth+="--";
      //}
          list.Text=depth+ds.Tables

[0].Rows[i]["name"].ToString();
     }
     list.Value=ds.Tables[0].Rows[i]["id"].ToString();
     droplist.Items.Add(list);
     DataSet ds2=returnDataset(Int32.Parse(ds.Tables

[0].Rows[i]["id"].ToString()));
     if(ds2.Tables[0].Rows.Count>0){
      DropDownListBind(Int32.Parse(ds.Tables

[0].Rows[i]["id"].ToString()),DropDownList1);
     }
    }
   }
  }

  private void treeShow(int parterid,TreeNode treenode){//递归类别
   //  
   DataSet ds=returnDataset(parterid);
   if (ds!=null)
   {
    for(int i=0;i<ds.Tables[0].Rows.Count;i++)
    {
     TreeNode node=new TreeNode();
     node.Target=ds.Tables[0].Rows[i]["id"].ToString();
     node.Text=ds.Tables[0].Rows[i]["name"].ToString();
     treenode.Nodes.Add(node);
     node.Expanded=true;
     DataSet ds2=returnDataset(Int32.Parse(ds.Tables

[0].Rows[i]["id"].ToString()));
     if (ds2.Tables[0].Rows.Count>0)
     {
      treeShow(Int32.Parse(ds.Tables[0].Rows[i]

["id"].ToString()),node);
     }
    }
   }
  }

  private DataSet returnDataset(int parterid){
   OleDbConnection conn=new OleDbConnection();
   conn.ConnectionString="provider=microsoft.jet.oledb.4.0;data

source="+Server.MapPath("Data.mdb");
   OleDbDataAdapter cmd;
   DataSet ds=new DataSet();
   try
   {
    conn.Open();
    cmd=new OleDbDataAdapter("select * from treeview where

parterid="+parterid+" order by createtime asc",conn);
    cmd.Fill(ds);
   }
   catch(Exception ex)
   {
    Response.Write(ex.ToString());
    Response.End();
   }
   finally{
    conn.Dispose();
   }
   return ds;
  }

  private void addButton_Click(object sender, System.EventArgs e)
  {//添加节点
   if (TextBox1.Text!="")
   {
    TreeNode treenode=TreeView1.GetNodeFromIndex

(TreeView1.SelectedNodeIndex);
    string[] treedepth=treenode.GetNodeIndex().Split('.');
    if(treenode.Target!=null)
    {
     int depth=treedepth.Length-1;//获得深度
     int parterid=Int32.Parse(treenode.Target);//获得父类

ID
     string classname=TextBox1.Text;//获得类名
     OleDbConnection conn=new OleDbConnection();
     

conn.ConnectionString="provider=microsoft.jet.oledb.4.0;data source="+Server.MapPath

("Data.mdb");
     conn.Open();
     OleDbCommand cmd=new OleDbCommand();
     cmd.CommandType=CommandType.Text;
     cmd.Connection=conn;
     cmd.CommandText="insert into treeview

(name,parterid,depth)values('"+classname+"',"+parterid+","+depth+")";
     try
     {
      cmd.ExecuteNonQuery();
      Response.Write("<script>alert('添加成

功');location.href='TreeViewStudy.aspx';</script>");
      Response.End();
     }
     catch(Exception ex)
     {
      Response.Write(ex.ToString());
      Response.End();
     }
     finally
     {
      cmd.Dispose();
      conn.Dispose();
     }
    }
    else{
    //Response.Write(treenode.Target+"123<br>");
    }
   }
   else{
   Response.Write("请填写类别并选择节点");
   }
   }

  private void editButton_Click(object sender, System.EventArgs e)
  {//修改节点
   if (TextBox1.Text!="")
   {
    TreeNode treenode=TreeView1.GetNodeFromIndex

(TreeView1.SelectedNodeIndex);
    int id=Int32.Parse(treenode.Target);
    string classname=TextBox1.Text;
    if(treenode.Target!=null)
    {
     OleDbConnection conn=new OleDbConnection();
     

conn.ConnectionString="provider=microsoft.jet.oledb.4.0;data source="+Server.MapPath

("Data.mdb");
     conn.Open();
     OleDbCommand cmd=new OleDbCommand();
     cmd.CommandType=CommandType.Text;
     cmd.Connection=conn;
     cmd.CommandText="update treeview set

name='"+classname+"' where id="+id;
     try
     {
      cmd.ExecuteNonQuery();
      Response.Write("<script>alert('修改成

功');location.href='TreeViewStudy.aspx';</script>");
      Response.End();
     }
     catch(Exception ex)
     {
      Response.Write(ex.ToString());
      Response.End();
     }
     finally
     {
      cmd.Dispose();
      conn.Dispose();
     }
    }
    else{}
   }
   else
   {
    Response.Write("请填写类别并选择节点");
   }
  }

  private void delButton_Click(object sender, System.EventArgs e)
  {//删除   
   TreeNode treenode=TreeView1.GetNodeFromIndex

(TreeView1.SelectedNodeIndex);
   int id=Int32.Parse(treenode.Target);
   //Response.Write(id.ToString()+"<br>");
   string tmpid="";
   tmpid=id.ToString()+allid(treenode.Nodes).ToString();
   //Response.Write(tmpid);
   //Response.End();
   if (treenode.Target!="0")
   {
    OleDbConnection conn=new OleDbConnection();
    conn.ConnectionString="provider=microsoft.jet.oledb.4.0;data

source="+Server.MapPath("Data.mdb");
    conn.Open();
    OleDbCommand cmd=new OleDbCommand();
    cmd.CommandType=CommandType.Text;
    cmd.Connection=conn;
    cmd.CommandText="delete * from treeview where id in

("+tmpid+")";
    try
    {
     cmd.ExecuteNonQuery();
     Response.Write("<script>alert('删除成

功');location.href='TreeViewStudy.aspx';</script>");
     Response.End();
    }
    catch(Exception ex)
    {
     Response.Write(ex.ToString());
     Response.End();
    }
    finally
    {
     cmd.Dispose();
     conn.Dispose();
    }
   }
   else{
    Response.Write("不能删除根节点");    
   }
  }

  private string allid(TreeNodeCollection tnc)
  {//遍历TreeView节点(递归算法)
   foreach(TreeNode node in tnc){
    if(node.Nodes.Count!=0){
     returnvalue+=","+node.Target;
     //Response.Write(node.Text+node.Target+"<br>");
     allid(node.Nodes);     
    }
    else{
     //Response.Write(node.Text+node.Target+"<br>");
     returnvalue+=","+node.Target;
    }
   }
   return returnvalue;
  }

  private void moveButton_Click(object sender, System.EventArgs e)
  {//移动 
   //此功能实现的时候需要考虑移动中所有类的深度是否有子类问题
  }