打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
异步加载treeview

异步加载treeview 不需要ajax(适用于.NET 2.0后版本)

  记录一下Treeview的异步加载。

  最近做个小系统,但数据量的大量加载使得页面加载失败是经常的事情,真的是件痛苦的事情。

  找了很多控件和方法,一开始的思路是ajax,看起来也很美好,但遇到了不少问题。

  首先用了flytreeview/radtreeview两个控件,也支持Ajax异步加载,但flytreeview不支持text/value绑定,比较痛苦,radtreeview貌似还不错,但绑定xmldatasource很痛苦,xpath也不是很友好(可能是我不太熟悉)。

  最后找了半天,发现还是原生的treeview就可以搞定,这里需要的是动态后台绑定,并使用TreeNodePopulate事件和

node.PopulateOnDemand = true; node.SelectAction = TreeNodeSelectAction.Expand;这两个属性。

  前台直接上treeview控件,后台开始绑定,以下为示例:

01protected void Page_Load(object sender, EventArgs e)
02{
03if (this.Session.IsNewSession)
04{
05Response.Redirect("~/access.aspx");
06}
07if (!IsPostBack)
08{
09int user_id = (int)Session["user_id"];
10catalog_info myCatalog = new catalog_info();
11string str = "select * from catalog_info catalog_info INNER JOIN permission_catalog_info ON catalog_info.catalog_id = permission_catalog_info.catalog_id WHERE (permission_catalog_info.user_id ='" + user_id + "') and catalog_father_id='0' order by catalog_name desc";
12DataSet myset = DbHelperSQL.Query(str);
13if (myset.Tables[0].Rows.Count > 0)
14{
15DataTable nodeTable = myset.Tables[0];
16for (int i = 0; i < nodeTable.Rows.Count; i++)
17{
18TreeNode node = new TreeNode();
19string nodetext = nodeTable.Rows[i][0].ToString();
20node.Text = nodetext;
21node.Value = nodeTable.Rows[i][3].ToString();
22
23if (myCatalog.Exists(node.Value))
24{
25node.PopulateOnDemand = true;
26node.SelectAction = TreeNodeSelectAction.Expand;
27}
28TreeView1.Nodes.Add(node);
29}
30}
31}
32}

上面是treeview的顶层数据初始化,并动态设定相关节点的属性,

1if (myCatalog.Exists(node.Value))

为需要展开的节点,即需要异步加载的节点,里面这两个属性必须设置,否则异步加载可能会失败。

异步加载事件:TreeNodePopulate

01protected void TreeView1_TreeNodePopulate(object sender, TreeNodeEventArgs e)
02{
03string nodeSelect = "select * from catalog_info where catalog_father_id='" + e.Node.Value + "' order by catalog_name desc";
04DataSet myset = DbHelperSQL.Query(nodeSelect);
05if (myset.Tables[0].Rows.Count > 0)
06{
07DataTable nodeTable = myset.Tables[0];
08for (int i = 0; i < nodeTable.Rows.Count; i++)
09{
10TreeNode node = new TreeNode();
11string nodetext = nodeTable.Rows[i][0].ToString();
12node.Text = nodetext;
13
14node.Value = nodeTable.Rows[i][3].ToString();
15if (myCatalog.Exists(node.Value))
16{
17node.SelectAction = TreeNodeSelectAction.Expand;
18node.PopulateOnDemand = true;
19}
20e.Node.ChildNodes.Add(node);
21}
22}
23}

treeview内部自动实现了异步加载,无需ajax的使用,是不是很方便呢,当然效果可能没ajax的显示动态效果好。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
TreeView动态构造多级树并实现拖动(收藏)
C#中treeview的操作
jquery EasyUI 异步树 treeview,我所做的真正意义上的异步树(单选)
C#使用线程加载指定目录下的所有子目录和文件名称到TreeView中
treeview分层遍历
ASP.NET TreeView树型菜单操作实例(代码调试通过) - mdl821120的...
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服