Tree控制項的非同步載入方案的選擇建議(C#,ASP.NET 2.0)

來源:互聯網
上載者:User
筆者前言:本文要說的內容僅針對ASP.NET 2.0以上版本適用,內容也非常的簡單,本來不應該放在首頁的,但發現不知道的開發人員非常多,有必要提醒一下。所以請熟悉Treeview的朋友包涵了,呵呵。

現在Ajax流行,各類Tree的第三方控制項支援非同步載入的非常多。
我們項目組的成員通常到處找些樹控制項來用,給項目的穩定性帶來很多隱患,出了幾次問題。

我建議大家考慮直接使用.net內建的TreeView控制項。但這個控制項這樣才能非同步載入呢?
先看看範例程式碼:
其中 SelectAction="Expand" PopulateOnDemand="true" 這兩個屬性是關鍵,在後台代碼中,大家也可以看到給有子節點的節點,需要設定相關屬性        <asp:TreeView ID="TreeView1" runat="server" EnableClientScript="true" OnTreeNodePopulate="PopulateNode" ImageSet="Arrows" ExpandDepth="0">
            <Nodes>
                <asp:TreeNode Text="部門樹" Value="部門樹" SelectAction="Expand" PopulateOnDemand="true"/>
            </Nodes>
        </asp:TreeView>

後台代碼:
注意PopulateNode ,這個代碼中的寫法,是因為我串連的是一個每個層級的部門分別放在不同資料庫表,如果各個層級的部門資料都在同一個表裡,代碼將更加簡單。
TopSmart.UtilClass.Data.IDatabase 這個我自己封裝資料庫的類,大家可以替換使用自己常用的資料庫類,然後就可以了    public void PopulateNode(Object sender, TreeNodeEventArgs e)
    {
        PopulateMe(e.Node,e.Node.Depth);
    }


    public void PopulateMe(TreeNode node, int Depth)
    {
        TopSmart.UtilClass.Data.IDatabase db = TopSmart.UtilClass.Data.DataAccess.DatabaseCreate("hr");

        DataTable dt;
        if (Depth == 0)
            dt = db.GetDataTableFromSQL("select t.onelevelname as name,t.onelevelno as no from hrt_onelevel_dic t where t.valid = 1");
        else if (Depth == 1)
            dt = db.GetDataTableFromSQL("select t.twolevelname as name,t.twolevelno as no from hrt_twolevel_dic t where t.valid = 1 and t.onelevelno = '" + node.Value + "'");
        else
            dt = db.GetDataTableFromSQL("select t.deptname as name,t.deptno as no from hrt_dept_dic t where t.valid = 1 and t.twolevelno = '" + node.Value + "'");

        if (dt.Rows.Count > 0)
        {
            foreach (DataRow row in dt.Rows)
            {
                TreeNode NewNode = new TreeNode(row["name"].ToString(), row["no"].ToString());
                NewNode.PopulateOnDemand = (Depth == 2) ? false : true;
                NewNode.SelectAction = TreeNodeSelectAction.Expand;
                node.ChildNodes.Add(NewNode);
            }
        }
    }

NewNode.PopulateOnDemand = (Depth == 2) ? false : true; 這句是因為等於2的時候,我的系統沒有更低的子部門了。大家可以靈活使用,呵呵。

代碼完畢。大家看看,是不是很簡單?
而且簡單的就控制哪個節點可以非同步載入,哪個不用。不用寫指令碼,不用寫web service,呵呵。

官方的文檔,大家可以參考msdn:地址為
ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.NETDEVFX.v20.chs/cpref16/html/P_System_Web_UI_WebControls_TreeNode_PopulateOnDemand.htm

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.