不需要ajax,当展开treeview控件的时候加载数据

  最近做个系统,但数据量的大量加载使得页面加载变的非常慢,.net的treeview控件在数据量有几百条的时候在用递归绑定的时候就已经比较慢了,真的是件痛苦的事情。

  一开始的思路是ajax,看起来也很美好,但遇到了不少问题,可能是对ajax不太熟悉的原因。

  折腾了半天,发现还是原生的treeview就可以搞定,这里需要的是动态后台绑定,并使用TreeNodeExpanded事件和node.PopulateOnDemand=true; 这个属性。

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

 

private void IniTree()
        {
            try
            {
                TreeData.Nodes.Clear();

                DataRow[] rowList = Ds.Tables[0].Select("ParentID=0");

                foreach (DataRow row in rowList)
                {
                    TreeNode node = new TreeNode();
                    node.Text = row["CName"].ToString();
                    node.Value = row["DataID"].ToString();

                    //判断节点是否有子节点,设置此节点是否为动态填充
                    if (PubFuncs.CheckDataTableRows(Ds.Tables[0].Select("ParentID=" + row["DataID"].ToString())))
                    {
                        node.PopulateOnDemand = true;
                    }

                    TreeData.Nodes.Add(node);
                }

                //树默认只展开一层,会自动调用TreeNodeExpanded事件
                TreeData.ExpandDepth = 1;
            }
            catch (Exception e)
            {
                throw e;
            }
        }

        /// <summary>
        /// 创建树的子结点
        /// </summary>
        public void CreateSubTree(TreeNode parentNode, string ParentID)
        {
            //清空父节点原有数据
            parentNode.ChildNodes.Clear();

            DataRow[] rowList = Ds.Tables[0].Select("ParentID=" + ParentID);
            foreach (DataRow row in rowList)
            {
                TreeNode node = new TreeNode();
                node.Text = row["CName"].ToString();
                node.Value = row["DataID"].ToString();

                //判断节点是否有子节点,设置此节点是否为动态填充
                if (PubFuncs.CheckDataTableRows(Ds.Tables[0].Select("ParentID=" + row["DataID"].ToString())))
                {
                    node.PopulateOnDemand = true;
                }

                parentNode.ChildNodes.Add(node);
            }
        }

        protected void TreeData_TreeNodeExpanded(object sender, TreeNodeEventArgs e)
        {
            //判断当前展开节点是否有子节点,如果有不进行填充
            //可以考虑不加判断,每次展开的时候都重新加载,效率上会比较低
            if (e.Node.ChildNodes.Count <= 0)
            {
                CreateSubTree(e.Node, e.Node.Value.Trim());
            }
        }

当然效果可能没ajax的显示动态效果好。但是这样控件显示的速度快了好多。忙了半天小有成就。大笑

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值