实现多级 Grid 在 Ext.Net Demo 里有,本文旨在进一步说明它的实现,以及在此基础上,说明如何在多级Grid上,进行增删改等操作。

本文内容

  • 多级 Grid 概述
  • 实现多级 Grid

 

多级 Grid 概述

有这样一个实现:Grid 数据的某行下,也包含数据,单击或双击时,需要展开。默认情况,Grid 只显示第一级,当点击某行记录最前边的“+”,或双击某行记录时,展开与该记录相关的数据。对于数据库来说,最一般的是——自连表。

在暂不考虑数据分页的前提下,问问自己:

  • 首先,假设我们处于 Ajax 时代之前,没有任何三方组件可以提供这个功能,你对 JavaScript 只有一定的了解,但是对 C# 或是 Java 很熟练,那么若想实现这个功能你能想到什么?
  • 其次,假设我们处于 Ajax 时代之前,没有任何三方组件可以提供这个功能,但你已经对 JSON 和 JavaScript 都很熟悉,那么若想实现这个功能你能想到什么?
  • 最后,假设我们已经处于 Ajax 时代,没有现成的三方组件可以很好地提供这个功能,但是你对 JSON 和 jQuery 很熟悉,那么若想实现这个功能你能想到什么?

对于第一个假设,因为没有异步、没有局部刷新,我们只能将数据全部从数据库读出来,因为你对JavaScript 还不甚了解,所以只能利用 C# 或 JavaScrit 在服务器端创建嵌套的 <div> 或是 <table>(这需要一个相对复杂的逻辑),还要为 Grid 的展开创建客户端代码,绝大多数操作都在服务器端——这个实现绝不简单。要命的是,效率实在太低,暂且不说它完全需要回发,用户体验也差到极致。

对于第二个假设,没有异步、没有局部刷新,更没有现成三方组件可用,但是你已对 JSON 和 JavaScrit 有很好的了解,此时,你能想到的,也许是,从服务器端把数据全部读出来,因为数据库表本身就是自连表(比如,有 ID,有 PARENTID),无需进行复杂的业务处理,只需要将数据转换成 JSON 格式,剩下的工作,完全在客户端完成(利用 JavaScript 解析 JSON)——这个也不大容易。但至少比第一个强,客户端完成绝大多数操作。

对于第三个假设,有异步、有局部刷新,更关键的是你对 JSON 和 jQuery 都很熟悉,那完全可以从数据库先获得第一级的数据,当用户单击或双击时,利用 jQuery,发出 Ajax 请求,从数据库获得指定记录下的相关数据,然后在回调成功时,添加到指定记录下……——这个思路不仅清晰,而且实现相对简单,用户体验也好,都是局部刷新,效率也高。

其实,说了这么多,仅仅是锻炼你的思维。因为现在很多三方组件都提供这个功能。如果你能体会人家的设计思想,以及实现一个功能时的思路,使用三方组件其实很容易,虽然看上去很复杂。

 

实现多级 Grid

首先看看,客户端代码都有什么,如下所示:

 
<%@ Register Assembly="Ext.Net" Namespace="Ext.Net" TagPrefix="ext" %>
<!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>
    <ext:ResourcePlaceHolder ID="ResourcePlaceHolder1" runat="server" Mode="Script" />
 
    <script type="text/javascript">
>
 
</head>
<body>
    <form id="form1" runat="server">
    <ext:ResourceManager ID="ResourceManager1" runat="server" />
    <ext:Toolbar ID="Toolbar1" runat="server">
        <Items>
            <ext:Toolbar ID="Toolbar2" runat="server">
                <Items>
                    <ext:Button ID="Button1" runat="server" Text="添加">
                        <Listeners>
                            <Click Handler="setAction('add',#{Params});" />
                        </Listeners>
                        <DirectEvents>
                            <Click OnEvent="btn_action_Click">
                                <ExtraParams>
                                    <ext:Parameter Name="action" Value="Ext.decode(#{Params}.getValue()).action" Mode="Raw">
                                    </ext:Parameter>
                                    <ext:Parameter Name="id" Value="Ext.decode(#{Params}.getValue()).ui.id" Mode="Raw">
                                    </ext:Parameter>
                                </ExtraParams>
                            </Click>
                        </DirectEvents>
                    </ext:Button>
                    <ext:Button ID="Button2" runat="server" Text="修改">
                        <Listeners>
                            <Click Handler="setAction('edit',#{Params});" />
                        </Listeners>
                        <DirectEvents>
                            <Click OnEvent="btn_action_Click">
                                <ExtraParams>
                                    <ext:Parameter Name="action" Value="Ext.decode(#{Params}.getValue()).action" Mode="Raw">
                                    </ext:Parameter>
                                    <ext:Parameter Name="id" Value="Ext.decode(#{Params}.getValue()).ui.id" Mode="Raw">
                                    </ext:Parameter>
                                </ExtraParams>
                            </Click>
                        </DirectEvents>
                    </ext:Button>
                    <ext:Button ID="Button3" runat="server" Text="删除">
                        <Listeners>
                            <Click Handler="setAction('del',#{Params});" />
                        </Listeners>
                        <DirectEvents>
                            <Click OnEvent="btn_action_Click">
                                <ExtraParams>
                                    <ext:Parameter Name="action" Value="Ext.decode(#{Params}.getValue()).action" Mode="Raw">
                                    </ext:Parameter>
                                    <ext:Parameter Name="id" Value="Ext.decode(#{Params}.getValue()).ui.id" Mode="Raw">
                                    </ext:Parameter>
                                </ExtraParams>
                            </Click>
                        </DirectEvents>
                    </ext:Button>
                </Items>
            </ext:Toolbar>
        </Items>
    </ext:Toolbar>
    <ext:Hidden ID="Params" runat="server" Text="">
    </ext:Hidden>
    </form>
</body>
</html>

相关文章:

  • 2022-01-31
  • 2022-12-23
  • 2021-07-06
  • 2022-12-23
  • 2021-09-23
  • 2022-12-23
  • 2022-12-23
  • 2021-06-20
猜你喜欢
  • 2021-05-31
  • 2022-12-23
  • 2021-07-15
  • 2022-12-23
  • 2022-12-23
  • 2021-12-10
  • 2022-12-23
相关资源
相似解决方案