//
-----数据库结构-----------------------
//
CREATE TABLE [T_Menu] (
[ID] [ int ] NOT NULL ,
[PARENTID] [nvarchar] ( 50 ) COLLATE Chinese_PRC_CI_AS NULL ,
[NODENAME] [nvarchar] ( 100 ) COLLATE Chinese_PRC_CI_AS NULL ,
[NODEID] [nvarchar] ( 50 ) COLLATE Chinese_PRC_CI_AS NULL ,
[ORDERID] [ int ] NULL ,
CONSTRAINT [PK_T_Menu] PRIMARY KEY CLUSTERED
(
[ID]
) ON [PRIMARY]
) ON [PRIMARY]
GO
// ----------显示树结构--------------- //
public class treeleft : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Label lbl_Curnodeid;
protected Microsoft.Web.UI.WebControls.TreeView TreeView1;
public DataTable dt;
public DataRow dr;
private void Page_Load(object sender, System.EventArgs e)
{
if (!Page.IsPostBack)
{
TreeView();
}
}
private void TreeView()
{
DocTree doctree = new DocTree();
string str_Sql = "select * from T_Menu order by orderid";
dt = doctree.ExecSQL(str_Sql);
if (dt.Rows.Count > 0)// 遍历树
{
BindTreeView1("ID","ParentID","NodeID","NodeName",str_Sql,"mainFrame","Treeright.aspx",lbl_Curnodeid,TreeView1);
}
}
public void BindTreeView1(string ID,string parentID,string NodeID,string NodeName,string str_Sql,string Frame,string Url,Label lbl_Curnodeid,TreeView TreeView1)
{
DocTree doctree = new DocTree();
DataTable dt = doctree.ExecSQL(str_Sql); // 获得树的内存表
TreeView1.Nodes.Clear(); // 清空树
TreeNode rootnode=new TreeNode();
rootnode.Text = dt.Rows[0][NodeName].ToString(); // 给节点绑定显示值mytext
rootnode.NodeData=dt.Rows[0][ID].ToString(); // 给节点绑定key值 nodeid
rootnode.Expanded=true; // 默认根结点为展开
rootnode.Target = Frame;
rootnode.NavigateUrl = Url+"?"+NodeID+"=" + dt.Rows[0][NodeID].ToString()+"&NodeName="+dt.Rows[0][NodeName].ToString();
TreeView1.Nodes.Add(rootnode);
string parentid=dt.Rows[0][parentID].ToString()+dt.Rows[0][ID].ToString()+"_"; // 他子节点的parentid字段值
CreateNode1(ID,parentID,NodeID,NodeName,Frame,Url,parentid,rootnode);// 加入所有根结点以下的结点
}
public void CreateNode1(string ID,string parentID,string NodeID,string NodeName,string Frame,string Url,string parentid,TreeNode parentnode)
{
DataRow [] drs = dt.Select("parentid = '" + parentid + "'");// 选出所有子节点
//遍历所有子节点
foreach( DataRow r in drs )
{
TreeNode tempnode = new TreeNode();
tempnode.Text = r["NodeName"].ToString();
tempnode.NodeData = r[ID].ToString();
parentnode.Nodes.Add(tempnode);
tempnode.Expanded=true;
tempnode.Target = Frame;
tempnode.NavigateUrl = Url+"?"+NodeID+"=" + r[NodeID].ToString()+"&NodeName="+r[NodeName].ToString();
parentid = r["parentid"].ToString() + r["ID"].ToString()+"_";
CreateNode1(ID,parentID,NodeID,NodeName,Frame,Url,parentid,tempnode);
}
}
//-------------------------操作树,增加节点,修改------------aspx------------------------//
<form id="Form1" method="post" runat="server">
<table cellSpacing="1" cellPadding="4" width="100%" bgColor="#7f0040" border="0">
<tr bgColor="#ffffff">
<td bgColor="#d2a9ac">在
<asp:label id="Label2" runat="server">Label</asp:label><b><font color="red"></font></b>下增加栏目</td>
</tr>
<tr bgColor="#ffffff">
<td>
<div align="center">要增加栏目名称(中文):
<asp:textbox id="TexAdd_cn" runat="server"></asp:textbox>(英文):
<asp:textbox id="TexAdd_en" runat="server"></asp:textbox></div>
</td>
</tr>
<tr bgColor="#ffffff">
<td>
<div align="center"><input class="ubo" id="Submit2" type="submit" value="增加" name="Submit3" runat="server">
</div>
</td>
</tr>
</table>
<br>
<table cellSpacing="1" cellPadding="4" width="100%" bgColor="#7f0040" border="0">
<tr bgColor="#ffffff">
<td bgColor="#d2a9ac">修改
<asp:label id="Label1" runat="server">Label</asp:label><b><font color="red"></font></b>栏目</td>
</tr>
<tr bgColor="#ffffff">
<td>
<div align="center">要修改栏目名称(中文):
<asp:textbox id="TexUpdate_cn" runat="server"></asp:textbox>(英文):
<asp:textbox id="TexUpdate_en" runat="server"></asp:textbox></div>
</td>
</tr>
<tr bgColor="#ffffff">
<td>
<div align="center">
<input class="ubo" id="Submit1" type="submit" value="修改" name="Submit3" runat="server">
<input class="ubo" id="Reset1" type="reset" value="还原" name="Submit22" runat="server">
</div>
</td>
</tr>
</table>
<br>
<asp:Label id="lbl_Curnodeid" style="Z-INDEX: 101; LEFT: 72px; POSITION: absolute; TOP: 216px"
runat="server"></asp:Label>
</form>
-------------------------------------------------.cs--------------------
private void Page_Load(object sender, System.EventArgs e)
{
//NodeName = Request.QueryString["NodeName"];
//NodeID = Request.QueryString["NodeID"];
if (!Page.IsPostBack)
{
string NodeID = Request.QueryString["NodeID"].ToString().Substring(0,Request["NodeID"].ToString().Length-1);
string NodeName = Request.QueryString["NodeName"];
Label1.Text = NodeName.ToString();
Label2.Text = NodeName.ToString();
Label2.Font.Bold=true;
Label1.Font.Bold=true;
TexUpdate_cn.Text = NodeName;
lbl_Curnodeid.Text=GetTwoMiddleLastStr(NodeID,"_","_");
}
}
/**//// <summary>
/// 获得两个字符之间最后一次出现时的所有字符
/// </summary>
/// <param name="strOriginal">要处理的字符</param>
/// <param name="strFirst">最前哪个字符</param>
/// <param name="strLast">最后哪个字符</param>
/// <returns>返回值</returns>
public string GetTwoMiddleLastStr(string strOriginal,string strFirst,string strLast)
{
strOriginal=GetLastStr(strOriginal,strFirst);
strOriginal=GetFirstStr(strOriginal,strLast);
return strOriginal;
}
/**//// <summary>
/// 获得某个字符串在另个字符串第一次出现时前面所有字符
/// </summary>
/// <param name="strOriginal">要处理的字符</param>
/// <param name="strSymbol">符号</param>
/// <returns>返回值</returns>
public string GetFirstStr(string strOriginal,string strSymbol)
{
int strPlace=strOriginal.IndexOf(strSymbol);
if (strPlace!=-1)
strOriginal=strOriginal.Substring(0,strPlace);
return strOriginal;
}
/**//// <summary>
/// 获得某个字符串在另个字符串最后一次出现时后面所有字符
/// </summary>
/// <param name="strOriginal">要处理的字符</param>
/// <param name="strSymbol">符号</param>
/// <returns>返回值</returns>
public string GetLastStr(string strOriginal,string strSymbol)
{
int strPlace=strOriginal.LastIndexOf(strSymbol)+strSymbol.Length;
strOriginal=strOriginal.Substring(strPlace);
return strOriginal;
}
private void Submit2_ServerClick(object sender, System.EventArgs e)
{
if (Request.QueryString["NodeID"]==null) // 判断是否选择右边树导航
{
JScript.Alert("请选择左边栏目名称!");
return;
}
// 下面是增加子节点
this.AddChildNode("ID","parentid","Nodeid","NodeName",lbl_Curnodeid);
// 刷新左边树导航
Response.Write ("<script language=\"javascript\">parent.frames(\"leftFrame\").document.location.reload();</"+"script>");
}
public void AddChildNode(string ID,string parentid,string NodeID,string NodeName,Label lbl_Curnodeid)
{
if(TexAdd_cn.Text!="")
{
DocTree doctree = new DocTree();
string str_Sql="Select Max("+ID+") as ID from T_Menu";
DataRow Row = doctree.ExecSQL(str_Sql).Rows[0];
string str_MaxId=(int.Parse(Row[0].ToString())+1).ToString();
str_Sql="select * from T_Menu where "+ID+"="+lbl_Curnodeid.Text;
Row = doctree.ExecSQL(str_Sql).Rows[0];
string str_=Row[parentid]+lbl_Curnodeid.Text+"_";
string str_Location=str_+str_MaxId+"_";
string str_Sql1="INSERT INTO T_Menu ("+ID+",ORDERID,"+parentid+","+NodeID+","+NodeName+") VALUES ("+str_MaxId+","+str_MaxId+",'"+str_+"','"+str_Location+"','"+TexAdd_cn.Text.Replace(" ","")+"')";
bool result = doctree._ExecSQL(str_Sql1);
}
else
{
JScript.Alert("请填写节点内容");
}
}
private void Submit1_ServerClick(object sender, System.EventArgs e)
{
if(TexUpdate_cn.Text.Trim()!="")
{
DocTree doctree = new DocTree();
bool result = doctree._ExecSQL("Update T_Menu Set NodeName='"+ TexUpdate_cn.Text.Trim() +"' Where NODEID='"+ Request.QueryString["NodeID"] +"'");
if ( result)
{
JScript.Alert("修改完成");
}
Page.RegisterClientScriptBlock("js","<script>parent.frames(\"leftFrame\").document.location.reload();</script>");
}
}
CREATE TABLE [T_Menu] (
[ID] [ int ] NOT NULL ,
[PARENTID] [nvarchar] ( 50 ) COLLATE Chinese_PRC_CI_AS NULL ,
[NODENAME] [nvarchar] ( 100 ) COLLATE Chinese_PRC_CI_AS NULL ,
[NODEID] [nvarchar] ( 50 ) COLLATE Chinese_PRC_CI_AS NULL ,
[ORDERID] [ int ] NULL ,
CONSTRAINT [PK_T_Menu] PRIMARY KEY CLUSTERED
(
[ID]
) ON [PRIMARY]
) ON [PRIMARY]
GO
// ----------显示树结构--------------- //
public class treeleft : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Label lbl_Curnodeid;
protected Microsoft.Web.UI.WebControls.TreeView TreeView1;
public DataTable dt;
public DataRow dr;
private void Page_Load(object sender, System.EventArgs e)
{
if (!Page.IsPostBack)
{
TreeView();
}
}
private void TreeView()
{
DocTree doctree = new DocTree();
string str_Sql = "select * from T_Menu order by orderid";
dt = doctree.ExecSQL(str_Sql);
if (dt.Rows.Count > 0)// 遍历树
{
BindTreeView1("ID","ParentID","NodeID","NodeName",str_Sql,"mainFrame","Treeright.aspx",lbl_Curnodeid,TreeView1);
}
}
public void BindTreeView1(string ID,string parentID,string NodeID,string NodeName,string str_Sql,string Frame,string Url,Label lbl_Curnodeid,TreeView TreeView1)
{
DocTree doctree = new DocTree();
DataTable dt = doctree.ExecSQL(str_Sql); // 获得树的内存表
TreeView1.Nodes.Clear(); // 清空树
TreeNode rootnode=new TreeNode();
rootnode.Text = dt.Rows[0][NodeName].ToString(); // 给节点绑定显示值mytext
rootnode.NodeData=dt.Rows[0][ID].ToString(); // 给节点绑定key值 nodeid
rootnode.Expanded=true; // 默认根结点为展开
rootnode.Target = Frame;
rootnode.NavigateUrl = Url+"?"+NodeID+"=" + dt.Rows[0][NodeID].ToString()+"&NodeName="+dt.Rows[0][NodeName].ToString();
TreeView1.Nodes.Add(rootnode);
string parentid=dt.Rows[0][parentID].ToString()+dt.Rows[0][ID].ToString()+"_"; // 他子节点的parentid字段值
CreateNode1(ID,parentID,NodeID,NodeName,Frame,Url,parentid,rootnode);// 加入所有根结点以下的结点
}
public void CreateNode1(string ID,string parentID,string NodeID,string NodeName,string Frame,string Url,string parentid,TreeNode parentnode)
{
DataRow [] drs = dt.Select("parentid = '" + parentid + "'");// 选出所有子节点
//遍历所有子节点
foreach( DataRow r in drs )
{
TreeNode tempnode = new TreeNode();
tempnode.Text = r["NodeName"].ToString();
tempnode.NodeData = r[ID].ToString();
parentnode.Nodes.Add(tempnode);
tempnode.Expanded=true;
tempnode.Target = Frame;
tempnode.NavigateUrl = Url+"?"+NodeID+"=" + r[NodeID].ToString()+"&NodeName="+r[NodeName].ToString();
parentid = r["parentid"].ToString() + r["ID"].ToString()+"_";
CreateNode1(ID,parentID,NodeID,NodeName,Frame,Url,parentid,tempnode);
}
}
//-------------------------操作树,增加节点,修改------------aspx------------------------//
<form id="Form1" method="post" runat="server">
<table cellSpacing="1" cellPadding="4" width="100%" bgColor="#7f0040" border="0">
<tr bgColor="#ffffff">
<td bgColor="#d2a9ac">在
<asp:label id="Label2" runat="server">Label</asp:label><b><font color="red"></font></b>下增加栏目</td>
</tr>
<tr bgColor="#ffffff">
<td>
<div align="center">要增加栏目名称(中文):
<asp:textbox id="TexAdd_cn" runat="server"></asp:textbox>(英文):
<asp:textbox id="TexAdd_en" runat="server"></asp:textbox></div>
</td>
</tr>
<tr bgColor="#ffffff">
<td>
<div align="center"><input class="ubo" id="Submit2" type="submit" value="增加" name="Submit3" runat="server">
</div>
</td>
</tr>
</table>
<br>
<table cellSpacing="1" cellPadding="4" width="100%" bgColor="#7f0040" border="0">
<tr bgColor="#ffffff">
<td bgColor="#d2a9ac">修改
<asp:label id="Label1" runat="server">Label</asp:label><b><font color="red"></font></b>栏目</td>
</tr>
<tr bgColor="#ffffff">
<td>
<div align="center">要修改栏目名称(中文):
<asp:textbox id="TexUpdate_cn" runat="server"></asp:textbox>(英文):
<asp:textbox id="TexUpdate_en" runat="server"></asp:textbox></div>
</td>
</tr>
<tr bgColor="#ffffff">
<td>
<div align="center">
<input class="ubo" id="Submit1" type="submit" value="修改" name="Submit3" runat="server">
<input class="ubo" id="Reset1" type="reset" value="还原" name="Submit22" runat="server">
</div>
</td>
</tr>
</table>
<br>
<asp:Label id="lbl_Curnodeid" style="Z-INDEX: 101; LEFT: 72px; POSITION: absolute; TOP: 216px"
runat="server"></asp:Label>
</form>
-------------------------------------------------.cs--------------------
private void Page_Load(object sender, System.EventArgs e)
{
//NodeName = Request.QueryString["NodeName"];
//NodeID = Request.QueryString["NodeID"];
if (!Page.IsPostBack)
{
string NodeID = Request.QueryString["NodeID"].ToString().Substring(0,Request["NodeID"].ToString().Length-1);
string NodeName = Request.QueryString["NodeName"];
Label1.Text = NodeName.ToString();
Label2.Text = NodeName.ToString();
Label2.Font.Bold=true;
Label1.Font.Bold=true;
TexUpdate_cn.Text = NodeName;
lbl_Curnodeid.Text=GetTwoMiddleLastStr(NodeID,"_","_");
}
}
/**//// <summary>
/// 获得两个字符之间最后一次出现时的所有字符
/// </summary>
/// <param name="strOriginal">要处理的字符</param>
/// <param name="strFirst">最前哪个字符</param>
/// <param name="strLast">最后哪个字符</param>
/// <returns>返回值</returns>
public string GetTwoMiddleLastStr(string strOriginal,string strFirst,string strLast)
{
strOriginal=GetLastStr(strOriginal,strFirst);
strOriginal=GetFirstStr(strOriginal,strLast);
return strOriginal;
}
/**//// <summary>
/// 获得某个字符串在另个字符串第一次出现时前面所有字符
/// </summary>
/// <param name="strOriginal">要处理的字符</param>
/// <param name="strSymbol">符号</param>
/// <returns>返回值</returns>
public string GetFirstStr(string strOriginal,string strSymbol)
{
int strPlace=strOriginal.IndexOf(strSymbol);
if (strPlace!=-1)
strOriginal=strOriginal.Substring(0,strPlace);
return strOriginal;
}
/**//// <summary>
/// 获得某个字符串在另个字符串最后一次出现时后面所有字符
/// </summary>
/// <param name="strOriginal">要处理的字符</param>
/// <param name="strSymbol">符号</param>
/// <returns>返回值</returns>
public string GetLastStr(string strOriginal,string strSymbol)
{
int strPlace=strOriginal.LastIndexOf(strSymbol)+strSymbol.Length;
strOriginal=strOriginal.Substring(strPlace);
return strOriginal;
}
private void Submit2_ServerClick(object sender, System.EventArgs e)
{
if (Request.QueryString["NodeID"]==null) // 判断是否选择右边树导航
{
JScript.Alert("请选择左边栏目名称!");
return;
}
// 下面是增加子节点
this.AddChildNode("ID","parentid","Nodeid","NodeName",lbl_Curnodeid);
// 刷新左边树导航
Response.Write ("<script language=\"javascript\">parent.frames(\"leftFrame\").document.location.reload();</"+"script>");
}
public void AddChildNode(string ID,string parentid,string NodeID,string NodeName,Label lbl_Curnodeid)
{
if(TexAdd_cn.Text!="")
{
DocTree doctree = new DocTree();
string str_Sql="Select Max("+ID+") as ID from T_Menu";
DataRow Row = doctree.ExecSQL(str_Sql).Rows[0];
string str_MaxId=(int.Parse(Row[0].ToString())+1).ToString();
str_Sql="select * from T_Menu where "+ID+"="+lbl_Curnodeid.Text;
Row = doctree.ExecSQL(str_Sql).Rows[0];
string str_=Row[parentid]+lbl_Curnodeid.Text+"_";
string str_Location=str_+str_MaxId+"_";
string str_Sql1="INSERT INTO T_Menu ("+ID+",ORDERID,"+parentid+","+NodeID+","+NodeName+") VALUES ("+str_MaxId+","+str_MaxId+",'"+str_+"','"+str_Location+"','"+TexAdd_cn.Text.Replace(" ","")+"')";
bool result = doctree._ExecSQL(str_Sql1);
}
else
{
JScript.Alert("请填写节点内容");
}
}
private void Submit1_ServerClick(object sender, System.EventArgs e)
{
if(TexUpdate_cn.Text.Trim()!="")
{
DocTree doctree = new DocTree();
bool result = doctree._ExecSQL("Update T_Menu Set NodeName='"+ TexUpdate_cn.Text.Trim() +"' Where NODEID='"+ Request.QueryString["NodeID"] +"'");
if ( result)
{
JScript.Alert("修改完成");
}
Page.RegisterClientScriptBlock("js","<script>parent.frames(\"leftFrame\").document.location.reload();</script>");
}
}