前台
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="SelectMenu.aspx.cs" Inherits="SelectMenu" %>
<!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></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<table>
<tr>
<td>
内容</td>
<td>
属性</td>
<td>
列表</td>
<td>
操作</td>
<td>
</td>
</tr>
<tr>
<td>
<asp:TextBox ID="txtContent" runat="server"></asp:TextBox></td>
<td>
<asp:CheckBox ID="cbIsFirst" runat="server" Text="主节点" />
</td>
<td>
<asp:DropDownList ID="ddlChannels" runat="server" AutoPostBack="True" OnSelectedIndexChanged="ddlChannels_SelectedIndexChanged">
</asp:DropDownList></td>
<td>
<asp:DropDownList ID="ddlOpreat" runat="server">
<asp:ListItem Value="Add">添加</asp:ListItem>
<asp:ListItem Value="Mod">修改</asp:ListItem>
<asp:ListItem Value="Del">删除</asp:ListItem>
</asp:DropDownList></td>
<td>
<asp:Button ID="btnOK" runat="server" OnClick="btnOK_Click" Text="应用" /></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;
using System.Data.OleDb;
public partial class SelectMenu : System.Web.UI.Page
{
//DataTable dt = new DataTable();
//设置连接字符串
static string connstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|db_Mis.mdb;";
//建立数据库连接
static OleDbConnection conn = new OleDbConnection(connstr);
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BindDDL();
}
}
//执行查询语句,并返回一个DataTable
public DataTable Query(string sql)
{
OleDbCommand cmd = new OleDbCommand(sql, conn);
OleDbDataAdapter sda = new OleDbDataAdapter(cmd);
DataTable dt = new DataTable();
try
{
conn.Open();
sda.Fill(dt);
}
catch (Exception ex)
{
Response.Write(ex.Message);
}
finally
{
sda.Dispose();
cmd.Dispose();
conn.Close();
}
return dt;
}
//返回节点的上级节点Id
public DataTable GetFather(string FatherId)
{
return Query("select * from tb_Channels where Id=" + FatherId);
}
//返回节点的组号
public DataTable GetGroupId(string Id)
{
string sql;
//判断主节点
if (this.cbIsFirst.Checked)
{
//获取下一个组号
sql = "Select MAX(GroupId)+1 from tb_Channels";
}
else
{
//获取当前节点的组号
sql = "select GroupId from tb_Channels where Id=" + Id;
}
return Query(sql);
}
//返回所有字段
public DataTable GetChild()
{
return Query("Select * from tb_Channels ORDER BY GroupId,FatherId ASC");
}
//检查渠道是否存在
public DataTable Check(string Channel, string FatherId)
{
return Query("select * from tb_Channels where Channel='"+Channel+"' and FatherId="+FatherId);
}
//执行非查询语句
public void NonQuery(string sql)
{
OleDbCommand cmd = new OleDbCommand(sql, conn);
try
{
conn.Open();
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
Response.Write(ex.Message);
}
finally
{
cmd.Dispose();
conn.Close();
}
}
//将数据绑定
public void BindDDL()
{
DataTable dt = GetChild();
this.ddlChannels.Items.Clear();
foreach (DataRow dr in dt.Rows)
{
ListItem li = new ListItem(str(dr[1].ToString(),dr[2].ToString())+dr[1].ToString(), dr[0].ToString());
this.ddlChannels.Items.Add(li);
}
}
public string str(string Channel,string FatherId)
{
if (FatherId == "0")
{
return "";
}
else
{
DataTable dt = GetFather(FatherId);
if (dt.Rows.Count > 0)
{
Channel = str(dt.Rows[0][1].ToString(), dt.Rows[0][2].ToString()) + dt.Rows[0][1].ToString() + "-->";
return Channel;
}
else
{
return "该节点的上级节点被删除-->";
}
}
}
protected void btnOK_Click(object sender, EventArgs e)
{
switch (this.ddlOpreat.SelectedValue)
{
case "Add": Add(); break;
case "Mod": Mod(); break;
case "Del": Del(); break;
}
BindDDL();
}
public void Add()
{
string Channel = this.txtContent.Text.Trim();
string FatherId=this.ddlChannels.SelectedValue;
string Channeled = this.ddlChannels.SelectedItem.Text;
if(this.cbIsFirst.Checked)
{
FatherId="0";
}
string GroupId=GetGroupId(FatherId).Rows[0][0].ToString();
if (string.IsNullOrEmpty(Channel))
{
Response.Write("<script>alert('渠道名称不能为空!');</script>");
}
else
{
DataTable dt = Check(Channel,FatherId);
if (dt.Rows.Count > 0)
{
Response.Write("<script>alert('该渠道名已存在!');</script>");
}
else
{
NonQuery("insert into tb_Channels(Channel,FatherId,GroupId) values('" + Channel + "'," + FatherId + "," + GroupId + ")");
this.txtContent.Text = "";
}
}
}
public void Mod()
{
string Channel = this.txtContent.Text.Trim();
string Id = this.ddlChannels.SelectedValue;
if (string.IsNullOrEmpty(Channel))
{
Response.Write("<script>alert('请输入新的渠道名称!');</script>");
}
else
{
NonQuery("Update tb_Channel set Channel='" + Channel + "' where Id="+Id);
}
}
public void Del()
{
string Id = this.ddlChannels.SelectedValue;
DataTable dt = GetFather(Id);
foreach (DataRow dr in dt.Rows)
{
if (dr[2].ToString() == "0")
{
Response.Write("<script>alert('主节点不能删除!');</script>");
}
else
{
Response.Write("<script>confirm('您确认要删除该渠道吗?');</script>");
NonQuery("Delete from tb_Channels where Id=" + Id);
}
}
}
protected void ddlChannels_SelectedIndexChanged(object sender, EventArgs e)
{
if (this.ddlOpreat.SelectedValue == "Mod")
{
string str=this.ddlChannels.SelectedItem.Text;
if(str.Contains("-->"))
{
str=str.Substring(str.LastIndexOf("-->")+3);
}
this.txtContent.Text = str;
}
}
}
数据库结构