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

    技术2022-05-11  61

    前台:

     

    <% @ 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  />                        < 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                     }    }}

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


    最新回复(0)