您的位置:首页 > Web前端 > Node.js

asp.net中用TreeView控件的TreeNodePopulate事件实现无限分级的好办法

2010-01-13 18:23 477 查看
最近写一个用treeview控件无限分级的程序,在网上查了好多资料,大多数都是递归调用方法,觉得很复杂后来无意中翻看msdn并参照了一下,觉得这是个最好的办法,一说你就会豁然开朗。TreeView的事件中就有一项TreeNodePopulate事件为:正在填充TreeNode时激发某事件,给该事件写方法,就可以写从数据库中读取相应的子节点内容了。特别注意的就是在动态填充的时候一定要将节点的PopulateOnDemand属性设为true如下的例子:
TreeNode tn = new TreeNode();
tn.Text = dr["orgname"].ToString();
tn.PopulateOnDemand = true;
TreeView1.Nodes.Add(tn);
这样添加节点就会引发TreeNodePopulate事件。

具体实现代码如下:

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;

public partial class _Default : System.Web.UI.Page
{
TAdo Ado = new TAdo();
DataTable dt;

protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack) return;

string sSql = "select * from Catalog";
dt = Ado.runSqlGetTable(sSql);                    //将要绑定的数据表一次性加载到内存中, 避免多次断开、连接数据库

TreeNode tn = new TreeNode();
tn.Text = "公司文档栏目";
tn.Value = "1";                                         //初始化根节点
TreeNodeEventArgs args = new TreeNodeEventArgs(tn);
TreeView1_TreeNodePopulate(TreeView1, args);            //触发绑定事件
TreeView1.Nodes.Add(tn);
}
protected void TreeView1_TreeNodePopulate(object sender, TreeNodeEventArgs e)
{

DataRow[] rows = dt.Select("CatalogParentID = " + e.Node.Value);    //从内存表中得到所有子节点

foreach (DataRow row in rows)
{
TreeNode tn = new TreeNode();

tn.Text = row["CatalogName"].ToString();
tn.Value = row["CatalogID"].ToString();
tn.PopulateOnDemand = true;                  //这个不能掉, 不然它就不会继续触发事件绑定
e.Node.ChildNodes.Add(tn);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: