下面是CS中的代码:
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 GetDataProcedureCreateTree : System.Web.UI.Page
... {
DbHelperSQL Obj = new DbHelperSQL();
protected void Page_Load(object sender, EventArgs e)
...{
if (!IsPostBack)
...{
DataTable dt = new DataTable();
dt = getChindNode("0"); //得到所有父节点,放到DATATABLE中,这里默认根节点的父节点为 0
BindNode(dt, TreeView1.Nodes); //绑定所有的父节点
}
}
/**//// <summary>
/// 调用存储过程,得到父节点的子节点,放到DataTable中
/// </summary>
/// <param name="ParentID"></param>
/// <returns></returns>
private DataTable getChindNode(string ParentID)
...{
DataTable dt = new DataTable();
dt = Obj.ExecuteSql1("TreeViewGetData",ParentID);
return dt;
}
/**//// <summary>
/// 填充节点事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void TreeView1_TreeNodePopulate(object sender, TreeNodeEventArgs e)
...{
getDataNode(e.Node.Value, e.Node); //点加号展开时调用.得到数据并绑定.传入点击结点ID,和点击节点对像.
}
private void getDataNode(string ParentID,TreeNode Node)
...{
BindNode(getChindNode(ParentID), Node.ChildNodes); //向结点填充数据.
}
/**//// <summary>
/// 填充节点
/// </summary>
/// <param name="dt"></param>
/// <param name="Node"></param>
private void BindNode(DataTable dt ,TreeNodeCollection Node)
...{
DataView dv = new DataView(dt);
TreeNode NewNode;
foreach (DataRowView dr in dv)
...{
NewNode = new TreeNode();
NewNode.Text = dr["NodeName"].ToString();
NewNode.Value = dr["ID"].ToString();
Node.Add(NewNode);
//是否动态添加结点。
NewNode.PopulateOnDemand = Convert.ToInt32(dr["ChildNodeCount"].ToString()) > 0;
}
}
}
下面是aspx界面中的源:
<! 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 >
< asp:TreeView ID = " TreeView1 " runat = " server " ExpandDepth = " 0 "
OnTreeNodePopulate = " TreeView1_TreeNodePopulate " Style = " position: relative " ImageSet = " Simple " CollapseImageUrl = " ~/image/decrease.bmp " ExpandImageUrl = " ~/image/add.bmp " >
< ParentNodeStyle Font - Bold = " False " />
< HoverNodeStyle Font - Underline = " True " ForeColor = " #5555DD " />
< SelectedNodeStyle Font - Underline = " True " ForeColor = " #5555DD " HorizontalPadding = " 0px "
VerticalPadding = " 0px " />
< NodeStyle Font - Names = " Tahoma " Font - Size = " 10pt " ForeColor = " Black " HorizontalPadding = " 5px "
NodeSpacing = " 0px " VerticalPadding = " 2px " />
</ asp:TreeView >
</ div >
</ form >
</ body >
</ html >
下面是DbHelperSQL.cs中的代码:
using System.Data;
using System.Configuration;
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;
/**/ /// <summary>
/// DbHelperSQL 对数据库的各种操作。
/// </summary>
public class DbHelperSQL // 连接SQLSERVER数据库
... {
SqlConnection Conn; //定义连接
public DbHelperSQL()
...{
}
/**//// <summary>
/// 连字数据库
/// </summary>
public void ConnectDataBase()
...{
string Connectionstring = ConfigurationSettings.AppSettings["ConnectionString"];
Conn = new SqlConnection(Connectionstring);
Conn.Open();
}
/**//// <summary>
/// 执行存储过程返回DataTable
/// </summary>
/// <param name="sql"></param>
/// <param name="ParentID"></param>
/// <returns></returns>
public DataTable ExecuteSql1(string sql, string ParentID)
...{
DataTable dt;
try
...{
ConnectDataBase();
dt = new DataTable();
SqlDataAdapter da = new SqlDataAdapter(sql, Conn);
SqlParameter parm = new SqlParameter("@ParentID", ParentID);
da.SelectCommand.Parameters.Add(parm);
da.SelectCommand.CommandType = CommandType.StoredProcedure;
da.Fill(dt);
Conn.Close();
return dt;
}
catch
...{
Conn.Close();
return dt = null;
}
}
}
存储过程:
@ParentID nvarchar( 40 )) -- 参数,父节点ID
AS
IF @ParentID IS NULl -- 如果,父节点ID为空
SELECT [ID],[NodeName] ,(
SELECT COUNT( * ) FROM RA_SubjectStore WHERE ParentID = Org.[ID]) AS ChildNodeCount
FROM RA_SubjectStore AS Org WHERE @ParentID IS NULL
ELSE
-- 查询出该父节点下第一级子节点
SELECT [ID],[NodeName] ,(
SELECT COUNT( * ) FROM RA_SubjectStore WHERE ParentID = Org.[ID]) AS ChildNodeCount
FROM RA_SubjectStore AS Org WHERE ParentID = @ParentID
GO
下面的比较清楚
private void BuildTree(int ParentID, TreeView TreeNM)
{
DataView dv = new DataView(DT);
dv.RowFilter = "[PID]=" + ParentID;
foreach (DataRowView Row in dv)
{
String NodeName = Row[2].ToString();
String NodeId = Row[0].ToString();
String NodeUrl = Row[3].ToString();
String NodeExpend = Row[4].ToString();
TreeNode Node = CreateNode(NodeName, NodeId, NodeUrl, NodeExpend);
TreeNM.Nodes.Add(Node);
BuildNode(Convert.ToInt32(NodeId), Node);
}
}
private void BuildNode(int ParentID, TreeNode pNode)//递归绑定结点
{
DataView dv = new DataView(DT);
dv.RowFilter = "[PID]=" + ParentID;
foreach (DataRowView Row in dv)
{
String NodeName = Row[2].ToString();
String NodeId = Row[0].ToString();
String NodeUrl = Row[3].ToString();
String NodeExpend = Row[4].ToString();
TreeNode Node = CreateNode(NodeName, NodeId, NodeUrl, NodeExpend);
pNode.ChildNodes.Add(Node);
BuildNode(Convert.ToInt32(NodeId), Node);
}
}
private TreeNode CreateNode(string nodeText, string nodeID, string link, string isExpanded)
{
TreeNode Node = new TreeNode();
Node.Text = nodeText;
// Node = nodeID;
Node.Target = "main";
if (link != "")
{
Node.NavigateUrl = link;
}
else
{
Node.NavigateUrl = string.Empty;
}
if (isExpanded == "1")
{
Node.Expanded = true;
}
else
{
Node.Expanded = false;
}
Node.SelectAction = TreeNodeSelectAction.Expand;//和ASP.NET1.1中TREEVIEW的SelectExpands属性等效
return Node;
}