EXT.NET使用まとめ(2)---TreePanel(右クリックメニュー付き、ノードカスタム属性)

27555 ワード

TreePanel(右クリックメニュー付き、ノードカスタム属性)
実はこの木のコントロールも使いやすいです。http://www.ztree.me/v3/main.php#_zTree Info
html
    <ext:Panel ID="ContentPanel" runat="server" Width="960" MinHeight="560" Height="560"  Border="false" Closable="false" Layout="BorderLayout">

                <Items>

                    <ext:Panel ID="PanelWest" runat="server" Region="West" Title="    " Width="200" Collapsible="true" Split="true"  MinWidth="175" MaxWidth="400" Layout="CardLayout" >

                        <Items>

                            <ext:TreePanel ID="IndexTableTree" RootVisible="false" runat="server" AutoScroll="true" Border="true">

                                <Listeners>

                                    <ItemClick Fn="LinkToDefineColumn"></ItemClick>

                                    <ItemContextMenu Fn="ShowMenu" StopEvent="true" />

                                </Listeners>

                                <Model>

                                    <ext:Model ID="Model1" runat="server">

                                        <Fields>

                                            <ext:ModelField Name="CODE" Type="String" />

                                            <ext:ModelField Name="BASETYPE" Type="String" />

                                            <ext:ModelField Name="SAVETYPE" Type="String" />

                                            <ext:ModelField Name="parenttablecode" Type="String" />

                                        </Fields>

                                    </ext:Model>

                                </Model>

                                <SelectionModel>

                                    <ext:RowSelectionModel ID="RowSelectionModel1" runat="server" Mode="Single" />

                                </SelectionModel>

                            </ext:TreePanel>

                        </Items>

                        <Listeners>

                        <Collapse Fn="colsett"></Collapse>

                        <Expand Fn="colsett"></Expand>

                        </Listeners>

                    </ext:Panel>

                    <ext:Panel ID="PanelCenter" runat="server" Region="Center" Flex="4" Layout="CardLayout">

                    

                    </ext:Panel>

            </Items>

    </ext:Panel>

    <ext:Menu ID="TreeContextMenu" runat="server">

        <Items>

            <ext:MenuItem ID="MenuItemAdd" runat="server" Text="    " Handler="AddChildTable();" IconCls="diy_add">

            </ext:MenuItem>

            <ext:MenuItem ID="MenuItemAddParent" runat="server" Text="    " Handler="AddParentTable();" IconCls="diy_add">

            </ext:MenuItem>

            <ext:MenuSeparator runat="server" ID="MenuSeparator1"/> 

            <ext:MenuItem ID="MenuItemEdit" runat="server" Text="     " Handler="EDITTable();" IconCls="diy_edit">

            </ext:MenuItem>

        </Items>

    </ext:Menu>
スクリプト
<script type="text/javascript">

    var ShowMenu = function (view, node, item, index, e) {

        SelectNode=node;

        var menu = <%=TreeContextMenu.ClientID %>;

        var id=node.get("id");

        var parenttablecode=node.get("parenttablecode");

        idflag=id;

        if (id=="RootPublic"||id=="RootPrivate") {

            return false;

        }

        var scode=node.get("S_CODE");

        S_CODE=scode;

        if (scode!="") {

            <%=MenuItemAdd.ClientID %>.hide();

            <%=MenuItemAddParent.ClientID  %>.hide();

            if ((parenttablecode == ""||parenttablecode == null) && (scode == "0" || scode == "1")) {

                    <%=MenuItemAdd.ClientID %>.show();

                }

        }else {

            <%=MenuItemAdd.ClientID %>.hide();

            <%=MenuItemAddParent.ClientID  %>.show();

        }

        <%=MenuSeparator1.ClientID %>.show();

        <%=MenuItemEdit.ClientID %>.show();

        menu.showAt([e.getXY()[0], e.getXY()[1] + 10]);

        e.stopEvent();

    }

</script>
バックグラウンドバインディングデータソース:
        private void BuildTree()

        {

            Ext.Net.Node root = new Ext.Net.Node();

            root.Text = "Root";

            IndexTableTree.Root.Add(root);

             List<EXTTreeNode> listALL = GetData();

            List<EXTTreeNode> list = GetData().FindAll(p=>p.pId=="");

            if (list!= null &&list.Count>0)

            {

                foreach (var item in list)

                {

                    Ext.Net.Node node = new Ext.Net.Node();

                    node.Text = item.name;

                    node.NodeID = item.id;

                    if (!string.IsNullOrWhiteSpace(noid))

                    {

                        string flag = "";

                        ifMyChild(item.id, listALL, noid, ref flag);

                        if (flag=="1")

                        {

                            node.Expanded = true;

                        }

                    }

                    //       

                    node.CustomAttributes.Add(new ConfigItem("S_CODE", item.CODE, ParameterMode.Value));

                    node.CustomAttributes.Add(new ConfigItem("BASETYPE", item.BASETYPE, ParameterMode.Value));

                    node.CustomAttributes.Add(new ConfigItem("SAVETYPE", item.SAVETYPE, ParameterMode.Value));

                    node.CustomAttributes.Add(new ConfigItem("parenttablecode", item.parenttablecode, ParameterMode.Value));

                    node.Leaf = true;

                    //     

                    GetSubNode(node, listALL);

                    if (node.Children.Count > 0)

                        node.Leaf = false;

                    root.Children.Add(node);

                }  

            }

        }