using
System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Data.OleDb;
using System.Xml;
using System.Text;
namespace tree
{
/**//// <summary>
/// TABLE [tree]
/// COLUMN [treeid] INT IDENTITY
/// COLUMN [treetitle] VARCHAR
/// COLUMN [treenode] VARCHAR
/// </summary>
public class tree : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Button btnDelete;
protected System.Web.UI.WebControls.Button btnUpdate;
protected System.Web.UI.WebControls.Button btnAdd;
protected System.Web.UI.WebControls.Label lblTreeTitle;
protected System.Web.UI.WebControls.TextBox txtAddTree;
protected System.Web.UI.WebControls.TextBox txtUpdateTree;
protected System.Web.UI.HtmlControls.HtmlInputHidden hidTreeid;
protected System.Web.UI.WebControls.Label lblTree;
protected System.Web.UI.WebControls.Label lblPrompt;
protected System.Web.UI.WebControls.RequiredFieldValidator reqValAddTree;
protected System.Web.UI.WebControls.LinkButton lbMakeXml;
protected OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + HttpContext.Current.Server.MapPath("tree.mdb"));
private void Page_Load(object sender, System.EventArgs e)
{
if(!IsPostBack)
{
int treeid = 0;
if(Request.QueryString["treeid"] != null)
{
try
{
treeid = int.Parse(Request.QueryString["treeid"]);
}
catch
{
treeid = 0;
}
}
if(treeid == 0)
{
lblTreeTitle.Text = "树根";
hidTreeid.Value = "0";
txtUpdateTree.Enabled = false;
btnUpdate.Enabled = false;
btnDelete.Enabled = false;
}
else
{
string sqlStr = "SELECT treetitle, treenode FROM tree WHERE treeid = " + treeid.ToString();
OleDbCommand cmd = new OleDbCommand(sqlStr, conn);
conn.Open();
OleDbDataReader dr = cmd.ExecuteReader(CommandBehavior.SingleRow);
if(dr.Read())
{
lblTreeTitle.Text = dr["treetitle"].ToString();
txtUpdateTree.Text = dr["treetitle"].ToString();
hidTreeid.Value = treeid.ToString();
}
dr.Close();
conn.Close();
}
if(Application["tree"] == null)
{
treeBuild();
}
else
{
lblTree.Visible = true;
lblTree.Text = Application["tree"].ToString();
}
}
}
private void treeBuild()
{
string sqlStr = "SELECT * FROM tree ORDER BY treenode";
OleDbDataAdapter da = new OleDbDataAdapter(sqlStr, conn);
DataTable dt = new DataTable();
da.Fill(dt);
da.Dispose();
int treeLevel;
char nodeChar;
string treeNode;
StringBuilder treeStr = new StringBuilder("");
for(int i = 0; i < dt.Rows.Count; i++)
{
treeNode = dt.Rows[i]["treenode"].ToString();
treeLevel = charCount(treeNode, ',');
if(treeLevel == 0)
{
nodeChar = '┼';
}
else
{
nodeChar = '─';
}
treeStr.Append("<TABLE cellspacing="1" cellpadding="0" border="0" width="100%"> <TR> ");
treeStr.Append("<TD align="right" width="" + (12 + treeLevel * 12) + "">" + nodeChar + "</TD> ");
treeStr.Append("<TD><A href="tree.aspx?treeid=" + dt.Rows[i]["treeid"] + "" title="" + treeNode + "">");
treeStr.Append(dt.Rows[i]["treetitle"] + "</A></TD> </TR> </TABLE> ");
}
if(treeStr.Length > 0)
{
Application.Lock();
Application["tree"] = treeStr.ToString();
Application.UnLock();
lblTree.Visible = true;
lblTree.Text = treeStr.ToString();
}
}
private void initTree()
{
lblTreeTitle.Text = "树根";
hidTreeid.Value = "0";
txtUpdateTree.Enabled = false;
btnUpdate.Enabled = false;
btnDelete.Enabled = false;
Application.Remove("tree");
treeBuild();
}
private void makeXml(string xmlPath)
{
string sqlStr = "SELECT * FROM tree ORDER BY treenode";
OleDbDataAdapter da = new OleDbDataAdapter(sqlStr, conn);
DataTable dt = new DataTable();
da.Fill(dt);
da.Dispose();
int ptreeDepth = -1;
int treeDepth = 0;
XmlTextWriter xw = new XmlTextWriter(xmlPath, null);
xw.Formatting = Formatting.Indented;
xw.IndentChar = ' ';
xw.Indentation = 1;
xw.WriteStartDocument();
xw.WriteStartElement("treeRoot");
foreach(DataRow dr in dt.Rows)
{
treeDepth = charCount(dr["treenode"].ToString(), ',');
if(treeDepth == ptreeDepth)
{
xw.WriteEndElement();
xw.WriteStartElement("treeBranch");
}
else if(treeDepth == ptreeDepth + 1)
{
xw.WriteStartElement("treeBranch");
}
else
{
for(int i = 0; i < ptreeDepth - treeDepth; i++)
{
xw.WriteEndElement();
}
xw.WriteEndElement();
xw.WriteStartElement("treeBranch");
}
xw.WriteAttributeString("treeid", dr["treeid"].ToString());
xw.WriteAttributeString("treeNode", dr["treenode"].ToString());
xw.WriteElementString("treeTitle", dr["treetitle"].ToString());
ptreeDepth = treeDepth;
}
for(int i = 0; i < treeDepth; i++)
{
xw.WriteEndElement();
}
xw.WriteEndElement();
xw.WriteEndElement();
xw.Flush();
xw.Close();
}
private int charCount(string theString, char theChar)
{
int charCount = 0;
char[] charArray = theString.ToCharArray();
for(int i = 0; i < charArray.Length; i++)
{
if(charArray[i] == theChar)
{
charCount++;
}
}
return charCount;
}
Web 窗体设计器生成的代码#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/**//// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.btnAdd.Click += new System.EventHandler(this.btnAdd_Click);
this.btnUpdate.Click += new System.EventHandler(this.btnUpdate_Click);
this.btnDelete.Click += new System.EventHandler(this.btnDelete_Click);
this.lbMakeXml.Click += new System.EventHandler(this.lbMakeXml_Click);
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
private void btnAdd_Click(object sender, System.EventArgs e)
{
int treeid = int.Parse(hidTreeid.Value);
int nodeSerial;
string treeTitle = txtAddTree.Text;
string treeNode;
string sqlStr;
OleDbCommand cmd = new OleDbCommand();
cmd.Connection = conn;
if(treeid == 0)
{
sqlStr = "SELECT TOP 1 treenode FROM tree WHERE treenode LIKE '___' ORDER BY treenode DESC";
cmd.CommandText = sqlStr;
conn.Open();
object objTreeNode = cmd.ExecuteScalar();
conn.Close();
nodeSerial = ((objTreeNode == null) ? 0 : int.Parse(objTreeNode.ToString())) + 1;
treeNode = nodeSerial.ToString("D3");
}
else
{
sqlStr = "SELECT treenode FROM tree WHERE treeid = " + treeid.ToString();
cmd.CommandText = sqlStr;
conn.Open();
string parentTreeNode = cmd.ExecuteScalar().ToString();
conn.Close();
sqlStr = "SELECT TOP 1 treenode FROM tree WHERE treenode LIKE '" + parentTreeNode + ",___' ORDER BY treenode DESC";
cmd.CommandText = sqlStr;
conn.Open();
OleDbDataReader dr = cmd.ExecuteReader(CommandBehavior.SingleRow);
if(dr.Read())
{
string brotherTree = dr[0].ToString();
nodeSerial = int.Parse(brotherTree.Substring(brotherTree.LastIndexOf(',') + 1, 3)) + 1;
}
else
{
nodeSerial = 1;
}
dr.Close();
conn.Close();
treeNode = parentTreeNode + "," + nodeSerial.ToString("D3");
}
sqlStr = "INSERT INTO tree(treetitle, treenode) VALUES(@treetitle, @treenode)";
cmd.CommandText = sqlStr;
cmd.Parameters.Add("@treetitle", OleDbType.VarChar, 50);
cmd.Parameters.Add("@treenode", OleDbType.VarChar, 243);
cmd.Parameters["@treetitle"].Value = treeTitle;
cmd.Parameters["@treenode"].Value = treeNode;
conn.Open();
int rowAffected = cmd.ExecuteNonQuery();
conn.Close();
if(rowAffected > 0)
{
lblPrompt.Text = "树枝 " + treeTitle + " 添加成功";
initTree();
}
else
{
lblPrompt.Text = "树枝 " + treeTitle + " 添加失败";
}
}
private void btnUpdate_Click(object sender, System.EventArgs e)
{
int treeid = int.Parse(hidTreeid.Value);
string treeTitle = Request.Form["txtUpdateTree"];
string sqlStr = "UPDATE tree SET treetitle = @treetitle WHERE treeid = " + treeid.ToString();
OleDbCommand cmd = new OleDbCommand(sqlStr, conn);
cmd.Parameters.Add("@treetitle", OleDbType.VarChar, 50);
cmd.Parameters["@treetitle"].Value = treeTitle;
conn.Open();
int rowAffected = cmd.ExecuteNonQuery();
conn.Close();
if(rowAffected > 0)
{
lblPrompt.Text = "树枝 " + treeTitle + " 更新成功";
initTree();
}
else
{
lblPrompt.Text = "树枝 " + treeTitle + " 更新失败";
}
}
private void btnDelete_Click(object sender, System.EventArgs e)
{
int treeid = int.Parse(hidTreeid.Value);
string sqlStr = "SELECT treenode FROM tree WHERE treeid = " + treeid.ToString();
OleDbCommand cmd = new OleDbCommand(sqlStr, conn);
conn.Open();
string treeNode = cmd.ExecuteScalar().ToString();
sqlStr = "DELETE FROM tree WHERE treeid = " + treeid.ToString() + " OR treenode LIKE '" + treeNode + "%'";
cmd.CommandText = sqlStr;
int rowAffected = cmd.ExecuteNonQuery();
conn.Close();
if(rowAffected > 0)
{
lblPrompt.Text = "删除成功";
initTree();
}
else
{
lblPrompt.Text = "删除失败";
}
}
private void lbMakeXml_Click(object sender, System.EventArgs e)
{
makeXml(Server.MapPath("tree.xml"));
}
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Data.OleDb;
using System.Xml;
using System.Text;
namespace tree
{
/**//// <summary>
/// TABLE [tree]
/// COLUMN [treeid] INT IDENTITY
/// COLUMN [treetitle] VARCHAR
/// COLUMN [treenode] VARCHAR
/// </summary>
public class tree : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Button btnDelete;
protected System.Web.UI.WebControls.Button btnUpdate;
protected System.Web.UI.WebControls.Button btnAdd;
protected System.Web.UI.WebControls.Label lblTreeTitle;
protected System.Web.UI.WebControls.TextBox txtAddTree;
protected System.Web.UI.WebControls.TextBox txtUpdateTree;
protected System.Web.UI.HtmlControls.HtmlInputHidden hidTreeid;
protected System.Web.UI.WebControls.Label lblTree;
protected System.Web.UI.WebControls.Label lblPrompt;
protected System.Web.UI.WebControls.RequiredFieldValidator reqValAddTree;
protected System.Web.UI.WebControls.LinkButton lbMakeXml;
protected OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + HttpContext.Current.Server.MapPath("tree.mdb"));
private void Page_Load(object sender, System.EventArgs e)
{
if(!IsPostBack)
{
int treeid = 0;
if(Request.QueryString["treeid"] != null)
{
try
{
treeid = int.Parse(Request.QueryString["treeid"]);
}
catch
{
treeid = 0;
}
}
if(treeid == 0)
{
lblTreeTitle.Text = "树根";
hidTreeid.Value = "0";
txtUpdateTree.Enabled = false;
btnUpdate.Enabled = false;
btnDelete.Enabled = false;
}
else
{
string sqlStr = "SELECT treetitle, treenode FROM tree WHERE treeid = " + treeid.ToString();
OleDbCommand cmd = new OleDbCommand(sqlStr, conn);
conn.Open();
OleDbDataReader dr = cmd.ExecuteReader(CommandBehavior.SingleRow);
if(dr.Read())
{
lblTreeTitle.Text = dr["treetitle"].ToString();
txtUpdateTree.Text = dr["treetitle"].ToString();
hidTreeid.Value = treeid.ToString();
}
dr.Close();
conn.Close();
}
if(Application["tree"] == null)
{
treeBuild();
}
else
{
lblTree.Visible = true;
lblTree.Text = Application["tree"].ToString();
}
}
}
private void treeBuild()
{
string sqlStr = "SELECT * FROM tree ORDER BY treenode";
OleDbDataAdapter da = new OleDbDataAdapter(sqlStr, conn);
DataTable dt = new DataTable();
da.Fill(dt);
da.Dispose();
int treeLevel;
char nodeChar;
string treeNode;
StringBuilder treeStr = new StringBuilder("");
for(int i = 0; i < dt.Rows.Count; i++)
{
treeNode = dt.Rows[i]["treenode"].ToString();
treeLevel = charCount(treeNode, ',');
if(treeLevel == 0)
{
nodeChar = '┼';
}
else
{
nodeChar = '─';
}
treeStr.Append("<TABLE cellspacing="1" cellpadding="0" border="0" width="100%"> <TR> ");
treeStr.Append("<TD align="right" width="" + (12 + treeLevel * 12) + "">" + nodeChar + "</TD> ");
treeStr.Append("<TD><A href="tree.aspx?treeid=" + dt.Rows[i]["treeid"] + "" title="" + treeNode + "">");
treeStr.Append(dt.Rows[i]["treetitle"] + "</A></TD> </TR> </TABLE> ");
}
if(treeStr.Length > 0)
{
Application.Lock();
Application["tree"] = treeStr.ToString();
Application.UnLock();
lblTree.Visible = true;
lblTree.Text = treeStr.ToString();
}
}
private void initTree()
{
lblTreeTitle.Text = "树根";
hidTreeid.Value = "0";
txtUpdateTree.Enabled = false;
btnUpdate.Enabled = false;
btnDelete.Enabled = false;
Application.Remove("tree");
treeBuild();
}
private void makeXml(string xmlPath)
{
string sqlStr = "SELECT * FROM tree ORDER BY treenode";
OleDbDataAdapter da = new OleDbDataAdapter(sqlStr, conn);
DataTable dt = new DataTable();
da.Fill(dt);
da.Dispose();
int ptreeDepth = -1;
int treeDepth = 0;
XmlTextWriter xw = new XmlTextWriter(xmlPath, null);
xw.Formatting = Formatting.Indented;
xw.IndentChar = ' ';
xw.Indentation = 1;
xw.WriteStartDocument();
xw.WriteStartElement("treeRoot");
foreach(DataRow dr in dt.Rows)
{
treeDepth = charCount(dr["treenode"].ToString(), ',');
if(treeDepth == ptreeDepth)
{
xw.WriteEndElement();
xw.WriteStartElement("treeBranch");
}
else if(treeDepth == ptreeDepth + 1)
{
xw.WriteStartElement("treeBranch");
}
else
{
for(int i = 0; i < ptreeDepth - treeDepth; i++)
{
xw.WriteEndElement();
}
xw.WriteEndElement();
xw.WriteStartElement("treeBranch");
}
xw.WriteAttributeString("treeid", dr["treeid"].ToString());
xw.WriteAttributeString("treeNode", dr["treenode"].ToString());
xw.WriteElementString("treeTitle", dr["treetitle"].ToString());
ptreeDepth = treeDepth;
}
for(int i = 0; i < treeDepth; i++)
{
xw.WriteEndElement();
}
xw.WriteEndElement();
xw.WriteEndElement();
xw.Flush();
xw.Close();
}
private int charCount(string theString, char theChar)
{
int charCount = 0;
char[] charArray = theString.ToCharArray();
for(int i = 0; i < charArray.Length; i++)
{
if(charArray[i] == theChar)
{
charCount++;
}
}
return charCount;
}
Web 窗体设计器生成的代码#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/**//// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.btnAdd.Click += new System.EventHandler(this.btnAdd_Click);
this.btnUpdate.Click += new System.EventHandler(this.btnUpdate_Click);
this.btnDelete.Click += new System.EventHandler(this.btnDelete_Click);
this.lbMakeXml.Click += new System.EventHandler(this.lbMakeXml_Click);
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
private void btnAdd_Click(object sender, System.EventArgs e)
{
int treeid = int.Parse(hidTreeid.Value);
int nodeSerial;
string treeTitle = txtAddTree.Text;
string treeNode;
string sqlStr;
OleDbCommand cmd = new OleDbCommand();
cmd.Connection = conn;
if(treeid == 0)
{
sqlStr = "SELECT TOP 1 treenode FROM tree WHERE treenode LIKE '___' ORDER BY treenode DESC";
cmd.CommandText = sqlStr;
conn.Open();
object objTreeNode = cmd.ExecuteScalar();
conn.Close();
nodeSerial = ((objTreeNode == null) ? 0 : int.Parse(objTreeNode.ToString())) + 1;
treeNode = nodeSerial.ToString("D3");
}
else
{
sqlStr = "SELECT treenode FROM tree WHERE treeid = " + treeid.ToString();
cmd.CommandText = sqlStr;
conn.Open();
string parentTreeNode = cmd.ExecuteScalar().ToString();
conn.Close();
sqlStr = "SELECT TOP 1 treenode FROM tree WHERE treenode LIKE '" + parentTreeNode + ",___' ORDER BY treenode DESC";
cmd.CommandText = sqlStr;
conn.Open();
OleDbDataReader dr = cmd.ExecuteReader(CommandBehavior.SingleRow);
if(dr.Read())
{
string brotherTree = dr[0].ToString();
nodeSerial = int.Parse(brotherTree.Substring(brotherTree.LastIndexOf(',') + 1, 3)) + 1;
}
else
{
nodeSerial = 1;
}
dr.Close();
conn.Close();
treeNode = parentTreeNode + "," + nodeSerial.ToString("D3");
}
sqlStr = "INSERT INTO tree(treetitle, treenode) VALUES(@treetitle, @treenode)";
cmd.CommandText = sqlStr;
cmd.Parameters.Add("@treetitle", OleDbType.VarChar, 50);
cmd.Parameters.Add("@treenode", OleDbType.VarChar, 243);
cmd.Parameters["@treetitle"].Value = treeTitle;
cmd.Parameters["@treenode"].Value = treeNode;
conn.Open();
int rowAffected = cmd.ExecuteNonQuery();
conn.Close();
if(rowAffected > 0)
{
lblPrompt.Text = "树枝 " + treeTitle + " 添加成功";
initTree();
}
else
{
lblPrompt.Text = "树枝 " + treeTitle + " 添加失败";
}
}
private void btnUpdate_Click(object sender, System.EventArgs e)
{
int treeid = int.Parse(hidTreeid.Value);
string treeTitle = Request.Form["txtUpdateTree"];
string sqlStr = "UPDATE tree SET treetitle = @treetitle WHERE treeid = " + treeid.ToString();
OleDbCommand cmd = new OleDbCommand(sqlStr, conn);
cmd.Parameters.Add("@treetitle", OleDbType.VarChar, 50);
cmd.Parameters["@treetitle"].Value = treeTitle;
conn.Open();
int rowAffected = cmd.ExecuteNonQuery();
conn.Close();
if(rowAffected > 0)
{
lblPrompt.Text = "树枝 " + treeTitle + " 更新成功";
initTree();
}
else
{
lblPrompt.Text = "树枝 " + treeTitle + " 更新失败";
}
}
private void btnDelete_Click(object sender, System.EventArgs e)
{
int treeid = int.Parse(hidTreeid.Value);
string sqlStr = "SELECT treenode FROM tree WHERE treeid = " + treeid.ToString();
OleDbCommand cmd = new OleDbCommand(sqlStr, conn);
conn.Open();
string treeNode = cmd.ExecuteScalar().ToString();
sqlStr = "DELETE FROM tree WHERE treeid = " + treeid.ToString() + " OR treenode LIKE '" + treeNode + "%'";
cmd.CommandText = sqlStr;
int rowAffected = cmd.ExecuteNonQuery();
conn.Close();
if(rowAffected > 0)
{
lblPrompt.Text = "删除成功";
initTree();
}
else
{
lblPrompt.Text = "删除失败";
}
}
private void lbMakeXml_Click(object sender, System.EventArgs e)
{
makeXml(Server.MapPath("tree.xml"));
}