Treeview 存储过程动态绑定树形

这是从同事那里得来的代码,当然他也是从网上看来的。呵呵!整理了一下,这个方法绑定速度远远高于上一种(递归绑定)绑定树控件的方法。

下面是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],[nodename] ,(
select count(*) from ra_subjectstore where parentid=org.[id]) as childnodecount
    from ra_subjectstore as org where parentid =@parentid
go

代码已

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值