Dropdownlist绑定树形数据库,Tree动态绑定数据库,动态增加节点,动态删除节点

前台:

 

<% @ Master Language = " C# "  AutoEventWireup = " true "  CodeFile = " MainMasterPage.master.cs "  Inherits = " Default_MainMasterPage "   %>

<! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >

< html  xmlns ="http://www.w3.org/1999/xhtml"   >
< head  runat ="server" >
    
< title > Untitled Page </ title >
</ head >
< body  style ="margin:0" >
    
< form  id ="form1"  runat ="server" >
    
< div  >
        
< table  style ="width: 100%; height: 100%" >
            
< tr  style ="background-color:Gray" >
                
< td  colspan ="2"  style ="height: 80px; background-color: #cccccc;"   >
                    页眉
                
</ td >
            
</ tr >
            
< tr >
                
< td  style ="width: 160px; background-color:Silver"  valign ="top" >
                    
< asp:TreeView  ID ="TreeLeft"  runat ="server"  ShowLines ="True" >
                    
</ asp:TreeView >
                
</ td >
                
< td  rowspan ="2" >
                   
< asp:ContentPlaceHolder  ID ="ContentPlaceHolder1"  runat ="server" >
                    
</ asp:ContentPlaceHolder >
                
</ td >
            
</ tr >
            
< tr >
                
< td  style ="width: 160px; background-color: silver"  valign ="top" >
                    Select ParentNode:
< br  />
                    
< asp:DropDownList  ID ="ddlParentID"  runat ="server" >
                    
</ asp:DropDownList >< br  />
                    Text:
< asp:TextBox  ID ="txtNodeName"  runat ="server" ></ asp:TextBox >< br  />
                    
&nbsp; < asp:Button  ID ="btnSubmit"  runat ="server"  Text ="Submit"  OnClick ="btnSubmit_Click"   />
                    
< asp:Button  ID ="btnDelete"  runat ="server"  Text ="Delete"  OnClick ="btnDelete_Click"   /></ td >
            
</ tr >
        
</ table >
       
</ div >
    
</ form >
</ body >
</ html >

后台:

 

using  System;
using  System.Data;
using  System.Configuration;
using  System.Collections;
using  System.Web;
using  System.Web.Security;
using  System.Web.UI;
using  System.Web.UI.WebControls;
using  System.Web.UI.WebControls.WebParts;
using  System.Web.UI.HtmlControls;
using  System.Data.SqlClient;

public   partial   class  Master_MasterPage : System.Web.UI.MasterPage
{
    
protected   string  ConnectionString  =  System.Configuration.ConfigurationManager.ConnectionStrings[ " ConnectionString " ].ToString();
    
protected   void  Page_Load( object  sender, EventArgs e)
    {
        
if  ( ! IsPostBack)
        {
            TreeleftBind();
            bindGroup();
        }
    }
    
#region  绑定树
    
private   void  TreeleftBind()
    {
        
this .TreeLeft.Nodes.Clear();
        DataTable dt 
=  GetTable();
        DataView dv 
=   new  DataView(dt);
        dv.RowFilter 
=   " TreeParentID = 0 " ;
        TreeNode node 
=   new  TreeNode();
        
foreach  (DataRowView drv  in  dv)
        {
            node.Text 
=  drv[ " TreeName " ].ToString();
            node.Value 
=  drv[ " ID " ].ToString();
            node.Expanded 
=   true ;
            
this .TreeLeft.Nodes.Add(node);
            AddReplies(dt, node);
        }
    }
    
private   void  AddReplies(DataTable dt, TreeNode node)
    {

        DataView dv 
=   new  DataView(dt);
        
        dv.RowFilter 
=   " TreeParentID=' "   +  node.Value  +   " ' " ;
        
foreach  (DataRowView row  in  dv)
        {
            TreeNode replyNode 
=   new  TreeNode();
            replyNode.Text 
=  row[ " TreeName " ].ToString();
            replyNode.Value 
=  row[ " ID " ].ToString();
            replyNode.NavigateUrl 
=  row[ " Link " ].ToString();
            replyNode.Expanded 
=   false ;
            node.ChildNodes.Add(replyNode);
            replyNode.ShowCheckBox 
=   true ;
            
            AddReplies(dt, replyNode);
        }

    }
    
private  DataTable GetTable()
    {
        SqlConnection con 
=   new  SqlConnection(ConnectionString);
        
string  strSQL  =   " select * from AutoTree " ;
        SqlDataAdapter da 
=   new  SqlDataAdapter(strSQL, con);
        DataTable dt 
=   new  DataTable();
        da.Fill(dt);
        
return  dt;
    }
    
#endregion

    
#region  绑定DropDownList
    
private   void  bindGroup()
    {
        
this .ddlParentID.Items.Clear();
        DataTable dt 
=  GetTable();  // 获取所有节点
         if  (dt.Rows.Count  >   0 )
        {
            
foreach  (DataRow row  in  dt.Rows)
            {
                
if  (row[ " TreeParentID " ].ToString().Trim()  ==   " 0 " ) // 绑定根节点
                {
                    
this .ddlParentID.Items.Add( new  ListItem(row[ " TreeName " ].ToString(), row[ " Id " ].ToString()));
                    
this .bindDropChildItem( this .ddlParentID, dt, row[ " ID " ].ToString(),  1 );
                }
            }
        }
    }
    
private   void  bindDropChildItem(DropDownList d, DataTable dt,  string  id,  int  length)
    {
        DataRow[] rows 
=  dt.Select( " TreeParentID=' "   +  id  +   " ' " " Id ASC " ); // 取出id子节点进行绑定
         for  ( int  i  =   0 ; i  <  rows.Length; i ++ )
        {
            
this .ddlParentID.Items.Add( new  ListItem( this .SpaceLength(length)  +  rows[i][ " TreeName " ].ToString(), rows[i][ " Id " ].ToString()));
            
this .bindDropChildItem(d, dt, rows[i][ " Id " ].ToString(), length  +   1 ); // 空白数目加1
        }
    }
    
private   string  SpaceLength( int  i)
    {
        
string  space  =   "" ;
        
for  ( int  j  =   0 ; j  <  i; j ++ )
        {
            space 
+=   " -- " ;
        }
        
return  space;
    }
    
#endregion

    
#region  动态增加节点
    
protected   void  btnSubmit_Click( object  sender, EventArgs e)
    {
        
string  rootID  =  ddlParentID.SelectedValue.ToString();
        
string  txtName  =   this .txtNodeName.Text;
        
using  (SqlConnection Conn  =   new  SqlConnection(ConnectionString))
        {
            SqlCommand cmd 
=   new  SqlCommand( " insert into AutoTree (TreeName,TreeParentID) values (@TreeName,@TreeParentID) " , Conn);
            cmd.Parameters.Add(
" @TreeName " , SqlDbType.NVarChar,  50 ).Value  =  txtName;
            cmd.Parameters.Add(
" @TreeParentID " , SqlDbType.NVarChar,  50 ).Value  =  rootID;
            Conn.Open();
            cmd.ExecuteNonQuery();
            
this .txtNodeName.Text  =   "" ;
        }
        TreeleftBind();
        bindGroup();
    }
    
#endregion

    
#region  动态删除节点
    
protected   void  btnDelete_Click( object  sender, EventArgs e)
    {
        
if  (TreeChecked()  !=   0 )
        {
            
string  strjavascript  =   " <script language='javascript'>alert('You cant delete the node which have childnode!')</script> " ;
            Page.ClientScript.RegisterStartupScript(
this .GetType(),  " onclick " , strjavascript);
        }
        
else
        {
            
foreach  (TreeNode node  in  TreeLeft.CheckedNodes)
            {

                
string  SelectTreeID  =  node.Value;
                
string  strDelete  =  String.Format( " delete from AutoTree where ID='{0}' " , SelectTreeID);
                GetDB getDB 
=   new  GetDB();
                getDB.cmdExecute(strDelete);
            }
            TreeleftBind();
            bindGroup();
        }
    }
    
protected   int  TreeChecked()
    {
        
int  count  =   0 ;
        
foreach  (TreeNode node  in   this .TreeLeft.CheckedNodes)
        {
            
if  (node.ChildNodes.Count  >   0 )
            {
                count 
=  count  +   1 ;
            }
        }
        
return  count;
    }
    
#endregion
    
protected   void  TreeLeft_SelectedNodeChanged( object  sender, EventArgs e)
    {
        TreeNode node 
=  TreeLeft.SelectedNode;
        
if  (node.ChildNodes.Count  !=   0 )
        {
            node.SelectAction 
=  TreeNodeSelectAction.Expand;
            node.Expanded 
=   true ;
        }
        
else
        {
            Response.Redirect(
" @ "   +  node.NavigateUrl); // 数据库中LINK字段的数据为:~/WOW/Moniqi.aspx
            
        }
    }
}


现在遗留的问题是:删除时如果选择了父级节点而不选该父节点下的子节点,那在提交删除后,该父节点是删除了,但是数据库里该父节点下的子节点并没有删除。现在要做的就是如何在删除父节点的同时删除该节点下的子节点。(现在加了个判断,如果节点下有子节点,将提示不能删除,至于如何选中父节点时也选中子节点,还没整出来)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值