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