加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

TreeView存储过程动态绑定树控件

发布时间:2020-12-12 15:45:50 所属栏目:MsSql教程 来源:网络整理
导读:下面是CS中的代码: 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.WebCo

下面是CS中的代码:

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 ?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界面中的源:

<% @?Page?Language = " C# " ?AutoEventWireup = " true " ?CodeFile = " GetDataProcedureCreateTree.aspx.cs " ?Inherits = " GetDataProcedureCreateTree " ? %>


<! 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;

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;

????????}

????}

}

?

存储过程:

CREATE?PROCEDURE?TreeViewGetData(

@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],(

??????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,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;???????? }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读