zoukankan      html  css  js  c++  java
  • Ext.Net 1.2.0_Ext.Net.TreePanel 勾选“纠结”发送给服务器端的方法

    本文内容

    • 演示 TreePanel 勾选通过 DirectMethods 发送给服务器端方法
    • 说明
    • 修改记录

    演示 TreePanel 勾选通过 DirectMethods 发送给服务器端方法

    本文演示 Ext.Net 通过前台脚本操作页面后,如何将数据“直接”发送给服务器端方法,从而摆脱之前 ASP.NET 时代(非 Ajax)的思维模式。

    <%@ Page Language="C#" %>
     
    <%@ Register Assembly="Ext.Net" Namespace="Ext.Net" TagPrefix="ext" %>
    <%@ Register Assembly="Ext.Net.Utilities" Namespace="Ext.Net.Utilities" TagPrefix="ext" %>
    <%@ Import Namespace="System.Data" %>
    <%@ Import Namespace="System.Collections" %>
    <!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 runat="server">
        <title></title>
     
        <script runat="server">
       1:  
       2:         protected void Page_Load(object sender, EventArgs e)
       3:         {
       4:             if (!X.IsAjaxRequest)
       5:             {
       6:                 this.BindTreePanel(this.TreePanel1.Root);
       7:             }
       8:         }
       9:         [DirectMethod]
      10:         public string GetSelectedNodes(string nodes)
      11:         {
      12:             // TODO
      13:             return nodes;
      14:         }
      15:         private void BindTreePanel(Ext.Net.TreeNodeCollection nodes)
      16:         {
      17:             DataTable dataSource = ExtNetInteractive.DS.GetDataSource();
      18:  
      19:             Ext.Net.TreeNode root = new Ext.Net.TreeNode();
      20:             root.NodeID = "0";
      21:             root.Text = "Root";
      22:  
      23:             if (!dataSource.IsNull() && dataSource.Rows.Count > 0)
      24:             {
      25:                 DataRow[] items = dataSource.Select("parentid='-1'");
      26:                 if (items.Length > 0)
      27:                 {
      28:                     DataSet ds = new DataSet();
      29:                     ds.Merge(items);
      30:                     DataTable SourseTable = ds.Tables[0];
      31:  
      32:                     for (int i = 0; i < SourseTable.Rows.Count; i++)
      33:                     {
      34:                         Ext.Net.TreeNode node = new Ext.Net.TreeNode();
      35:                         node.NodeID = SourseTable.Rows[i]["id"].ToString();
      36:                         node.Text = SourseTable.Rows[i]["name"].ToString();
      37:                         node.Checked = Ext.Net.ThreeStateBool.False;
      38:                         DataRow[] hasChild = dataSource.Select("parentid='" + SourseTable.Rows[i]["id"].ToString() + "'");
      39:                         if (hasChild.Length > 0) node.Icon = Icon.FolderGo;
      40:                         else node.Icon = Icon.Table;
      41:                         if (hasChild.Length <= 0) node.Leaf = true;
      42:                         else node.Leaf = false;
      43:  
      44:                         root.Nodes.Add(node);
      45:                         BindTreePanel(node.Nodes, dataSource, SourseTable.Rows[i]["id"].ToString());
      46:                     }
      47:                 }
      48:             }
      49:             nodes.Add(root);
      50:         }
      51:         private void BindTreePanel(Ext.Net.TreeNodeCollection nodes, DataTable allData, string parentID)
      52:         {
      53:             DataRow[] items = allData.Select("parentid='" + parentID + "'");
      54:  
      55:             if (items.Length > 0)
      56:             {
      57:                 DataSet ds = new DataSet();
      58:                 ds.Merge(items);
      59:                 DataTable dt = ds.Tables[0];
      60:                 for (int i = 0; i < dt.Rows.Count; i++)
      61:                 {
      62:                     Ext.Net.TreeNode node = new Ext.Net.TreeNode();
      63:                     node.NodeID = dt.Rows[i]["id"].ToString();
      64:                     node.Text = dt.Rows[i]["name"].ToString();
      65:                     node.Checked = Ext.Net.ThreeStateBool.False;
      66:                     DataRow[] hasChild = allData.Select("parentid='" + dt.Rows[i]["id"].ToString() + "'");
      67:                     if (hasChild.Length > 0) node.Icon = Icon.FolderGo;
      68:                     else node.Icon = Icon.Table;
      69:                     if (hasChild.Length <= 0) node.Leaf = true;
      70:                     else node.Leaf = false;
      71:  
      72:                     nodes.Add(node);
      73:                     BindTreePanel(node.Nodes, allData, dt.Rows[i]["id"].ToString());
      74:                 }
      75:             }
      76:         }
      77:     
    </script>
       1:  
       2:  
       3:     <script type="text/javascript" defer="defer">
       4:         var checkNodes = function(node, state) {
       5:             var tree = node.getOwnerTree();
       6:             tree.suspendEvents();
       7:             if (node.parentNode != null) {
       8:  
       9:                 node.cascade(function(node) {
      10:                     node.attributes.checked = state;
      11:                     node.ui.toggleCheck(state);
      12:                     return true;
      13:                 });
      14:                 var pNode = node.parentNode;
      15:                 while (pNode.id != "0") {
      16:                     if (state) {
      17:                         pNode.ui.toggleCheck(state);
      18:                         pNode.attributes.checked = state;
      19:                         pNode = pNode.parentNode;
      20:                     }
      21:                     else {
      22:                         var chk = false;
      23:                         pNode.eachChild(function(child) {
      24:                             if (child.attributes.checked || child.getUI().isChecked())
      25:                                 chk = true;
      26:                         });
      27:                         pNode.ui.toggleCheck(chk);
      28:                         pNode.attributes.checked = chk;
      29:                         pNode = pNode.parentNode;
      30:                     }
      31:                 }
      32:             }
      33:             tree.resumeEvents();
      34:         };
      35:  
      36:         var getSelectedNodes = function(tree) {
      37:             var msg = [],
      38:                     selNodes = tree.getChecked();
      39:             Ext.each(selNodes, function(node) {
      40:                 msg.push(node.text);
      41:             });
      42:             var selectedNodes = msg.join(",");
      43:             if (selectedNodes.length > 0) {
      44:                 Ext.net.DirectMethods.GetSelectedNodes(selectedNodes, {
      45:                     success: function(result) {
      46:                         Ext.Msg.alert('信息', result);
      47:                     },
      48:                     failure: function(result) {
      49:                         Ext.Msg.alert('信息', result);
      50:                     }
      51:                 });
      52:             }
      53:             else {
      54:                 alert('未选择.');
      55:             }
      56:         };
      57:     
    </script>
     
    </head>
    <body>
        <form id="form1" runat="server">
        <ext:ResourceManager ID="ResourceManager1" runat="server" />
        <ext:TreePanel ID="TreePanel1" runat="server" Icon="Accept" Height="300" Width="300"
            RootVisible="false" UseArrows="true" AutoScroll="true" AutoDataBind="false">
            <Root>
            </Root>
            <Listeners>
                <CheckChange Handler="checkNodes(node,checked);" />
            </Listeners>
            <SelectionModel>
                <ext:MultiSelectionModel ID="MultiSelectionModel1" runat="server">
                </ext:MultiSelectionModel>
            </SelectionModel>
        </ext:TreePanel>
        <ext:Button ID="Button1" runat="server" Text="获得勾选节点">
            <Listeners>
                <Click Handler="getSelectedNodes(#{TreePanel1});" />
            </Listeners>
        </ext:Button>
        </form>
    </body>
    </html>

    01

    图1 TreePanel 勾选

    02

    图2 回调

    说明

    • 脚本函数 checkNodes 用于在客户端勾选树的节点;
    • 脚本函数 getSelectedNodes 用于获得勾选的树的节点 text(也可以是id——node.id),并发送给服务器端;
    • 服务器端方法 BindTreePanel 用于构造 TreePanel。

    最开始,习惯于将客户端操作保存到页面的隐藏域,也就是说,针对这个例子,我们可以将勾选的节点 text保存到 Ext.Net.Hidden 里,然后在服务器端读取 hidden。如下所示:

    var getSelectedNodes = function(tree, obj) {
        var msg = [],
                selNodes = tree.getChecked();
        Ext.each(selNodes, function(node) {
            msg.push(node.id);
        });
        obj.setValue(msg.join(",");
        return true;
    };

    但这不是 Ext.Net 期望我们的实现方式,它期望我们,通过 Ext.net.DirectMethods 方法直接发送给服务器端方法。

    修改记录

    • 第一次 2012-4-28 [UPDATE]

    下载 Demo

  • 相关阅读:
    CVE-20117-111882漏洞复现及利用
    如何查看QQ坦白说来自谁
    2018 巅峰极客CTF misc writeup
    屏幕截图
    Unity中设置屏幕常亮
    面向对象设计原则
    【转】Unity资源管理原理知识(干货不嫌长)
    给指定的图片增加水印
    统计一个目录下各种文件类型及个数
    JDK 开发环境配置
  • 原文地址:https://www.cnblogs.com/liuning8023/p/2198349.html
Copyright © 2011-2022 走看看