异步加载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控件,后台开始绑定,以下为示例:

 

protected void Page_Load(object sender, EventArgs e)
        {
            if (this.Session.IsNewSession)
            {
                Response.Redirect("~/access.aspx");
            }
            if (!IsPostBack)
            {
                int user_id = (int)Session["user_id"];
                catalog_info myCatalog = new catalog_info();
                string 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";
                DataSet myset = DbHelperSQL.Query(str);
                if (myset.Tables[0].Rows.Count > 0)
                {
                    DataTable nodeTable = myset.Tables[0];
                    for (int i = 0; i < nodeTable.Rows.Count; i++)
                    {
                        TreeNode node = new TreeNode();
                        string nodetext = nodeTable.Rows[i][0].ToString();
                        node.Text = nodetext;
                        node.Value = nodeTable.Rows[i][3].ToString();
                       
             if (myCatalog.Exists(node.Value))
                        {
                            node.PopulateOnDemand = true;
                            node.SelectAction = TreeNodeSelectAction.Expand;
                        }
                        TreeView1.Nodes.Add(node);
                    }
                }
            }
        } 

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

 if (myCatalog.Exists(node.Value))

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

 

异步加载事件:TreeNodePopulate

 

 protected void TreeView1_TreeNodePopulate(object sender, TreeNodeEventArgs e)
        {
            string nodeSelect = "select * from catalog_info where catalog_father_id='" + e.Node.Value + "' order by catalog_name desc";
            DataSet myset = DbHelperSQL.Query(nodeSelect);
            if (myset.Tables[0].Rows.Count > 0)
            {
                DataTable nodeTable = myset.Tables[0];
                for (int i = 0; i < nodeTable.Rows.Count; i++)
                {
                    TreeNode node = new TreeNode();
                    string nodetext = nodeTable.Rows[i][0].ToString();
                    node.Text = nodetext;
                   
                    node.Value = nodeTable.Rows[i][3].ToString();
                    if (myCatalog.Exists(node.Value))
                    {
                        node.SelectAction = TreeNodeSelectAction.Expand;
                        node.PopulateOnDemand = true;
                    }
                    e.Node.ChildNodes.Add(node);
                }
            }
        }

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

转载于:https://www.cnblogs.com/massinger/archive/2011/01/23/1942662.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值