不需要ajax,當展開treeview控制項的時候載入資料

來源:互聯網
上載者:User

  最近做個系統,但資料量的大量載入使得頁面載入變的非常慢,.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的顯示動態效果好。但是這樣控制項顯示的速度快了好多。忙了半天小有成就。

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.