• [转】ASP.NET 数据分页第四篇 WizardGridView 威力加强版


    本帖只是把前一篇帖子「ASP.NET 数据分页第三篇 - 结合 Custom Control 处理 GridView 的 UI 呈现」里面,提供给大家下载的 Custom Control,也就是加强「分页」功能的 GridView,再改写了一些细部功能。新功能如下:

    * 这个 WizardGridView 所需要的 CSS、JavaScript,都已嵌入至 dll 里。如此一来,引用 WizardGridView 的页面即不必再引用外部的 CSS 档。
    * 新增了 5 个「属性」,程序员可从 VS 2005/2008 的「属性」窗口,以图形界面直接做设定,如下图 1 右侧所示。
    * 新增的「CustomFontSize」属性,可控制整个 GridView 里字体的大小 (预设为 Small),且不会受到引用页面中 HTML 设定的影响。
    * 新增的属性中,有三个是开放让程序员自订「单数行、双数行、鼠标置于其上的资料行」的背景颜色。
    * 加入了 icon 小图示。把 WizardGridView 加入 VS 2005/2008 的「工具箱」中时,会有我自订的小图示。
    * 为了搭配一些用来制作 chm 文件的软件,加入了可让 Sandcastle 软件可辨识的批注文字。
    * 有写过自订控件的人应知道,当一个 class 直接继承自微软原生的 GridView class,会造成引用的 ASPX 页面里,此自订 GridView 的 "Columns" tag 中的 IntelliSense 功
    能失效。因此我加入了 WizardTemplateField、WizardBoundField 两个 class,用来取代微软原生的 TemplateField、BoundField class。如此一来,当程序员在页面中引用WizardGridView 控件时,在 "Columns" tag 中的 IntelliSense 即又会生效。请参考下图 2。

    figure1
    图 1 新增的 5 个属性,已集中在 Visual Studio「属性」窗口的同一个 Index Tab 里


    figure2
    图 2 在 WizardGridView  "Columns" tag 中的 IntelliSense 仍会生效
     



    本帖的示例代码下载点:
    https://files.cnblogs.com/WizardWu/080928.zip
    (执行本示例,需要 SQL Server 的 Northwind 数据库)


    您只要直接以 VS 2005 开启「方案档 (.sln)」即可,里面的「WizardGridView」文件夹为 Custom Control 的 source code。用来 Demo 的网站范例有两个,一个是「SqlDataSource」文件夹,另一个是「ObjectDataSource」文件夹,前者会自动连结您本机的 SQL Server 2000/2005 的 Northwind 数据库,后者必须要您先在 SQL Server 2005 的 Northwind 里,先建立用来做「数据分页」的 Stored Procedure (亦附于本帖的下载代码里),才能正确连结您本机的 SQL Server 2005 的 Northwind 数据库。

    本帖的下载代码里,所附的新版的「数据分页」Stored Procedure,加上了可处理 DISTINCT 需求的功能 (实际上是用 GROUP BY 取代 DISTINCT 去做处理)。在本系列的前两篇帖子ASP.NET 数据分页第一篇 - 探讨分页原理及 SQL Server 2005 的 ROW_NUMBER 函数」、「ASP.NET 数据分页第二篇 - 范例下载里曾提到,若我们没有用 Stored Procedure 去做「数据分页」的处理,当数据表中有一百万笔记录时,则 ASP.NET 默认的行为,是使用者每次单击页码换页时,都是一百万笔全部重新撷取,此举会造成系统内存大量浪费、performance 大大降低,甚至造成当机。

    在本系列前几篇帖子里, 我们用来在 SQL Server 2005 中处理「数据分页」的 Stored Procedure,主要是用 SQL Server 2005 内建的一个 ROW_NUMBER 函数去做处理。但ROW_NUMBER 函数有一个缺点,就是会造成 DISTINCT 语句的功能失效;因此在本帖中的新版 Stored Procedure,是以 GROUP BY 取代 DISTINCT。在本帖下载代码的「ObejctDataSource」Demo 网站里,App_Code 文件夹里的 DAL 层、DAL2 层,也都会多传 一个 strGroupBy 参数,给这个专门用来做「数据分页」的 Stored Procedure。

    <%@ Register Assembly="WizardGridView" Namespace="WizardGridView" TagPrefix="Wizard" %>
    
    <Wizard:WizardGridView ID="WizardGridView1" runat="server" AllowPaging="True" AllowSorting="True"
        AutoGenerateColumns="False" DataKeyNames="OrderID" DataSourceID="SqlDataSource1"
        WizardCustomPager="True">
        <Columns>
            <asp:BoundField DataField="OrderID" HeaderText="OrderID" InsertVisible="False" ReadOnly="True"
                SortExpression="OrderID" />
            <asp:BoundField DataField="CustomerID" HeaderText="CustomerID" SortExpression="CustomerID" />
            <asp:BoundField DataField="OrderDate" HeaderText="OrderDate" SortExpression="OrderDate" />
            <asp:BoundField DataField="ShipName" HeaderText="ShipName" SortExpression="ShipName" />
            <asp:BoundField DataField="ShipCity" HeaderText="ShipCity" SortExpression="ShipCity" />
        </Columns>
    </Wizard:WizardGridView>
    
    <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ConnString_SqlClient %>"
        SelectCommand="SELECT [OrderID], [CustomerID], [OrderDate], [ShipName], [ShipCity] FROM [Orders]">
    </asp:SqlDataSource>
            
    
    or with IntelliSense like this:
    
    <Wizard:WizardGridView ID="WizardGridView1" runat="server" AllowPaging="True" AllowSorting="True"
        AutoGenerateColumns="False" DataKeyNames="OrderID" DataSourceID="SqlDataSource1"
        WizardCustomPager="True">
        <Columns>
            <asp:WizardBoundField DataField="OrderID" HeaderText="OrderID" InsertVisible="False" ReadOnly="True"
                SortExpression="OrderID" />
            <asp:WizardTemplateField  />

                                                                          --------------转自 WizardWu探讨分页原理及 SQL Server 2005 的 ROW_NUMBER 函数(四)

  • 相关阅读:
    python使用multiprocessing进行多进程编程(1)
    python使用multiprocessing进行多进程编程(1)
    最佳日志实践
    最佳日志实践
    最佳日志实践
    以大多数人的努力程度之低,根本轮不到去拼天赋
    以大多数人的努力程度之低,根本轮不到去拼天赋
    以大多数人的努力程度之低,根本轮不到去拼天赋
    C++Socket编程总结 [转]
    C++多线程的几个重要方法解析CreateEvent / SetEvent /ResetEvent/ 等
  • 原文地址:https://www.cnblogs.com/chehaoj/p/2751378.html
Copyright © 2020-2023  润新知