treegrid 異步加載

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="Web.WebForm1" %>
<span style="line-height: 1.5;"><%@ Register Assembly="Ext.Net" Namespace="Ext.Net" TagPrefix="ext" %></span>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <script type="text/javascript">
        var nodeLoad = function (store, operation, options) {
            var node = operation.node;
            App.direct.NodeLoad(node.getId(), {
                success: function (result) {
                    if (result != null) {
                        node.set('loading', false);
                        node.set('loaded', true);
                        var data = Ext.decode(result);
                        node.appendChild(data, undefined, true);
                        node.expand();
                    }
                    else {
                        node.Leaf = true;
                    }
                },

                failure: function (errorMsg) {

                    //  Ext.Msg.alert('Failure', errorMsg);
                }
            });

            return false;
        };
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <ext:ResourceManager ID="ResourceManager1" runat="server" />
    <ext:Viewport ID="Viewport1" runat="server" Layout="BorderLayout">
        <Items>
            <ext:TreePanel ID="Panel" runat="server" Region="Center" RootVisible="false"
                FolderSort="true" AutoScroll="true" Animate="true" Icon="ChartOrganisation">
                <Fields>
                    <ext:ModelField Name="ID" />
                    <ext:ModelField Name="CODE" />
                    <ext:ModelField Name="TEXT" />
                </Fields>
                <ColumnModel>
                    <Columns>
                        <ext:TreeColumn ID="TreeColumn2" runat="server" Text="名稱" Width="220" Sortable="true"
                            DataIndex="TEXT" />
                        <ext:Column ID="Column2" runat="server" Text="編碼" Width="120" Sortable="true" DataIndex="CODE" />
                    </Columns>
                </ColumnModel>
                <Listeners>
                    <BeforeLoad Fn="nodeLoad" />
                </Listeners>
            </ext:TreePanel>
        </Items>
    </ext:Viewport>
    </form>
</body>
</html>
protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack && !X.IsAjaxRequest)
            {
                this.BuildTree(PanelRoot);
            }
        }

        private Ext.Net.NodeCollection BuildTree(Ext.Net.NodeCollection nodes)
        {
            if (nodes == null)
            {
                nodes = new Ext.Net.NodeCollection();
            }

            DataTable dt = ac.Tree(); 得到一個DataTable

            Ext.Net.Node root2 = new Ext.Net.Node()
            {
                Text = "Root",
                NodeID = "1"
            };
            nodes.Add(root2);
            Bind_Tvx(dt, root2);
            dt.Dispose();
            return nodes;
        }


        private void Bind_Tvx(DataTable dt, Ext.Net.Node pNode)
        {
            NodeCollection nodes = new Ext.Net.NodeCollection();
            System.Data.DataView dv = new System.Data.DataView(dt);//將DataTable存到DataView中,以便於篩選數據    
            Ext.Net.Node tn;//建立TreeView的節點(TreeNode),以便將取出的數據添加到節點中     
            string filter = string.Format("parentid='{0}'", pNode.NodeID);
            dv.RowFilter = filter;//利用DataView將數據進行篩選,選出相同 父id值 的數據
            foreach (DataRowView drv in dv)
            {
                tn = new Ext.Net.Node();//建立一個新節點(學名叫:一個實例)  
                tn.NodeID = drv["ID"].ToString();//節點的Value值,一般爲數據庫的id值   
                tn.Text = drv["NOTETEXT"].ToString();//節點的Text,節點的文本顯示 
                tn.CustomAttributes.Add(new ConfigItem("CODE", drv["CODE"].ToString(), ParameterMode.Value));
                tn.CustomAttributes.Add(new ConfigItem("TEXT", drv["TEXT"].ToString(), ParameterMode.Value));
                CheckLeaf(dt,tn);
                pNode.Children.Add(tn);//將該節點加入到TreeNodeCollection(節點集合)中
            }
        }

        private static void CheckLeaf(DataTable dt,Ext.Net.Node tn)
        {
            System.Data.DataView dv = new System.Data.DataView(dt);//將DataTable存到DataView中,以便於篩選數據     
            string filter = string.Format("parentid='{0}'", tn.NodeID);
            dv.RowFilter = filter;//利用DataView將數據進行篩選,選出相同 父id值 的數據
            if (dv.Count>0)
            {
                tn.Leaf = false;
            }
            else
            {
               tn.Leaf = true;
            }
        }

        [DirectMethod]
        public static string NodeLoad(string nodeID)
        {
<span style="line-height: 1.5;">DataTable dt = ac.Tree();  得到一個DataTable</span>
            NodeCollection nodes=  Bind_Tvx(dt, nodeID);
            dt.Dispose();
            return nodes.ToJson();
        }

        private static NodeCollection Bind_Tvx(DataTable dt, string nodeID)
        {
            NodeCollection nodes = new Ext.Net.NodeCollection();
            System.Data.DataView dv = new System.Data.DataView(dt);//將DataTable存到DataView中,以便於篩選數據    
            Ext.Net.Node tn;//建立TreeView的節點(TreeNode),以便將取出的數據添加到節點中     
            string filter = string.Format("parentid='{0}'", nodeID);
            dv.RowFilter = filter;//利用DataView將數據進行篩選,選出相同 父id值 的數據
            foreach (DataRowView drv in dv)
            {
                tn = new Ext.Net.Node();//建立一個新節點(學名叫:一個實例)  
                tn.NodeID = drv["ID"].ToString();//節點的Value值,一般爲數據庫的id值   
                tn.Text = drv["TEXT"].ToString();//節點的Text,節點的文本顯示 
                tn.CustomAttributes.Add(new ConfigItem("TITLE", drv["TEXT"].ToString(), ParameterMode.Value));
                tn.CustomAttributes.Add(new ConfigItem("CODE", drv["CODE"].ToString(), ParameterMode.Value));
                CheckLeaf(dt, tn);
                nodes.Add(tn);//將該節點加入到TreeNodeCollection(節點集合)中
            }
            return nodes;
        }
    }
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章