延续本系列前两篇帖子「ASP.NET 数据分页第一篇 - 探讨分页原理及 SQL Server 2005 的 ROW_NUMBER 函数」、「ASP.NET 数据分页第二篇 - 范例下载」,本系列的第三篇帖子,同样是处理 GridView 的「分页」的问题,但前两篇是处理数据库的数据撷取问题,本篇是处理 GridView 前端 UI 呈现的问题。 
 
 本帖的重点,是版工我自己写了一个 Custom Control 的 GridView,名为 WizardGridView,其直接继承自微软 ASP.NET 2.0 原生的 GridView 控件,执行画面如下图 1 所示,在换页 (分页) 功能、相关信息显示上,强化了微软原生 GridView 不足之处。

 
图 1 WizardGridView 的执行画面,连结的数据库为 SQL Server 2005 的 Northwind 数据库的 Orders 数据表
 
 -------------------------------------------------
 本帖的示例代码下载点:
 http://files.cnblogs.com/WizardWu/080907.zip
 
 (执行本示例,需要 SQL Server 2000 / 2005 数据库的 Northwind 数据库,以及 IIS 或 VS 2005 / 2008)
 -------------------------------------------------
 
  若您只是要测试此 Custom Control,可直接用 IIS 或 VS 2005 / 2008,开启下载示例里的 SqlDataSource 网站。但您必须要有 SQL Server 2000 / 2005 的 Northwind 数据库。

另外,下载示例中,活页夹 ObjectDataSource,为结合本系列前两篇帖子的内容,结合「数据分页」的处理,亦即当您的数据表有一百万笔数据,依照微软原生 GridView、DataSource 控件的行为,当使用者每次单击「下一页」或页码,或单击字段 title 做排序时,每次都是一百万笔数据全部重新撷取,此举不但大量浪费 IIS 主机的内存,亦会消耗大量的 DB Server 系统资源及网络频宽。
 
 若您要用 IIS、VS 2005 / 2008 开启下载示例的 ObjectDataSource 网站时,请先在 SQL Server 2005 里,建立示例内附的 Stored Procedure。透过这个 Stored Procedure,当 使用者操作 GridView、每次要换页或排序时,只会去 Northwind 数据库的 Orders 数据表,撷取真正需要的 10 笔数据,再从 DB 回传此 10 笔数据,暂存在 IIS 内存里的 DataSet 里,最 后再呈现在前端的 GridView 中。有关详细原理,请参考本系列的前两篇帖子。
 
 
 至于 GridView 的呈现方式,是透过版工自己写的 WizardGridView 这个 Custom Control (一个 C# Class),如下图 2 所示。在此 ObjectDataSource 项目中,所附的为有源码的版本,尚未编译成 DLL。若在您自己的 ASP.NET 2.0 / 3.5 项目中,有 Bin 活页夹,想直接拿编译好的 DLL 来使用,可取用本帖下载示例中,SqlDataSource、WizardGridView 两个项目里的 WizardGridView.dll。
 
 
 图 2 ObjectDataSource 项目的结构,为 BLL、DAL、DAL2 四层式架构,再结合 WizardGridView 这个 Custom Control 去处理分页 UI 的呈现
 
 
 下载示例中,ObjectDataSource、WizardGridView 两个活页夹里,内附这个 WizardGridView 的源代码。如下图 3,若您想让程序员自订 GridView 的单数行、双数行、光棒的颜色,可将 WizardGridView.cs 中的第 93~95 行注解掉,如下列代码所示:

WizardGridView.cs 的第 93~95 行
// 设定「光棒、单数列、双数列」的颜色
protected override void OnRowDataBound(System.Web.UI.WebControls.GridViewRowEventArgs e)
{
    // 背景颜色暂时写死在下面这三行,但如此一来,即无法由程序员自订颜色;
    // 若要开放让程序员自订颜色,必须将下列三行注解掉,亦即改由每支程序的前端 .aspx 透过 GridView 的「属性」窗口,去设定颜色
    Wizard_OddRowBackColor = System.Drawing.Color.FromName("#FFFFFF");       // 白色
    Wizard_EvenRowBackColor = System.Drawing.Color.FromName("#F7F6F3");      // 浅蓝色 
    Wizard_MouseOverBackColor = System.Drawing.Color.FromName("#FFFF77");   // 米黄色


图 3 可开放让程序员自订单数行、双数行、光棒的颜色。至于 WizardEnableCustomPager 属性预设即为 True,亦即此「UI 分页」功能预设为启用

您亦可设定,「页码行 (Pager Row)」,是要显示在 GridView 上方还是下方,抑或上、下方都显示;另亦可设定「页码行」要显示在左、中、右侧。若要开放给程序员自订,就必须将 WizardGridView.cs 中的第 477~478 行注解掉,如下列代码所示,然后如 SqlServer2005.aspx 的第 64 行,要求程序员自行加入设定值。

WizardGridView.cs 中的第 477~478 行
// 设定「页码行」,是要显示在 GridView 上方还下方,还是上、下方都显示;另再设定「页码行」要显示在左、中、还是右侧。
// 若在此写死,则程序员即无法由前端自订;若要开放让程序员自订位置,必须将下面这两行注解掉。
//PagerSettings.Position = PagerPosition.Top; //.TopAndBottom;
//PagerStyle.HorizontalAlign = HorizontalAlign.Right;
SqlServer2005.aspx 的第 64 行
<PagerSettings Position="Top" /><PagerStyle HorizontalAlign="right" />

此外,当一个 Class 直接继承自 ASP.NET 2.0 的 GridView Class 时,这个自订 Class (亦即 Custom Control GridView 控件) 在 .aspx 的 Columns Tag 中的 IntelliSense,都会无故失效,如下图 4 所示,造成程序员开发上的不便。版工猜测,这可能是微软 GridView 本身的 Bug。

本帖下载示例的解决之道,是再加上 WizardBoundField、WizardTempateField 两个 Class,直接继承自微软原生的 BoundField、TempateField 这两个 Class,但却能让自订的 WizardGridView 控件里,Columns Tag 中的 IntelliSense 功能都恢复正常运作,如下图 4 所示。网友们亦可参考下载示例中,ObjectDataSource、SqlDataSource 网站里,SqlServer2005.aspx、Default.aspx 的写法。


 图 4 继承自 GridView 后,Columns Tag 里的 IntelliSense,默认会无故失效

本帖的 WizardGridView 控件,网友们若有任何建议,或发现有 Bug,欢迎留言反应。但版工因工作关系,时间有限,各位的意见或反应的 Bug 可能无法立刻修正,敬请见谅。

ASP.NET 数据分页第三篇 - 结合 Custom Control 处理 GridView 的 UI 呈现相关推荐

  1. Ext.grid.GridPanel + asp.net 数据分页

    Ext.grid.GridPanel + asp.net 数据分页 [转]http://www.cnblogs.com/tujiang/archive/2009/07/03/1516488.html ...

  2. Google引爆大数据时代的三篇论文

    Google引爆大数据时代的三篇论文 谈到Hadoop的起源,就不得不提Google的三驾马车:Google FS.MapReduce.BigTable.虽然Google没有公布这三个产品的源码,但是 ...

  3. Asp.Net 数据分页

    .Net 所使用的 ADO.Net较前身ADO在性能上有较大的提升,但是操作起来也较为繁琐,在 Asp 时代,对数据进行分页使用 RecordSet 的 PageSize 和 AbsolutePage ...

  4. 开启大数据时代谷歌三篇论文-Mapreduce

    摘要 MapReduce 是一个编程模型,也是一个处理和生成超大数据集的算法模型的相关实现.用户首先创建一 个 Map 函数处理一个基于 key/value pair 的数据集合,输出中间的基于 ke ...

  5. 开启大数据时代谷歌三篇论文-BigTable

    1 摘要 Bigtable 是一个分布式的结构化数据存储系统,它被设计用来处理海量数据:通常是分布在数千台普通服 务器上的 PB 级的数据. Google 的很多项目使用 Bigtable 存储数据, ...

  6. 你的数据也可以-三篇NAR的数据库

    生物信息分析离不开数据资源和数据库,生物信息学数据库分类概览 (第一版)系统梳理了常用功能数据库. 下面再分析3个我们承建的NAR发表的新数据库,以飨读者. 中医药方剂的数据库,收录方剂.药材.靶点. ...

  7. 机场生产运行数据统计指标-第三篇-客货邮行类

    1  按航班-旅客数量统计 1.1出港旅客统计 定义:指由某机场始发的旅客和中转飞机的联运旅客.具体定义如下. l  始发旅客:由客票确定以某机场为起点,始发的乘机的旅客. l  联运旅客:联运旅客指 ...

  8. 谷歌三篇论文(GFS,MapReduce,BigTable)

    Google引爆大数据时代的三篇论文 谈到Hadoop的起源,就不得不提Google的三驾马车:Google FS.MapReduce.BigTable.虽然Google没有公布这三个产品的源码,但是 ...

  9. Scott Mitchell 的ASP.NET 2.0数据教程之四十四::DataList和Repeater数据分页

    原文 | 下载本教程中的编码例子 | 下载本教程的PDF版 导言 分页和排序是显示数据时经常用到的功能.比如,在一个在线书店里搜索关于ASP.NET 的书的时候,可能结果会是成百上千,而每页只列出十条 ...

最新文章

  1. 置换 ---- 2020-2021 ICPC NERC 的 K. King‘s Task[置换类型思维题]
  2. Precision and recall From Wiki
  3. html 页面内锚点定位及跳转方法总结
  4. 网络营销外包——网络营销外包专员浅析提升用户体验从哪入手?
  5. 服务器报错您的主机中的软件中止了一个已建立的连接
  6. 对require四种引入方式的认识
  7. SAP CRM Division customizing
  8. HTML5 Canvas 画虚线组件
  9. 比特币近24小时内链上交易额有所上升,约为345.44亿美元
  10. 3张报表搞定财务分析
  11. ubnutu更换合适源(阿里源)
  12. Mac 入门教程:如何更改你的 Mac 设备名称
  13. 阿里面试官:HashMap 熟悉吧?好的,那就来聊聊 Redis 字典吧!
  14. 记录阿里技术面试全流程
  15. 抖音播放量不到200,新手该如何自救?
  16. s4 android4.4.2,三星Galaxy S4(GT-I9500)开始Android 4.4.2升级
  17. 如何利用python进行一次移动平均预测
  18. 数据结构习题集之魔王语言解释
  19. 跨境电商看不到另一面:商家刷单、平台封号、黑灰产牟利
  20. 前端学习—JavaScript

热门文章

  1. VMM系列之使用VMM服务器构建 Hyper-V主机(2)
  2. 受损骨骼可能在类似地球的重力条件下更快愈合
  3. Java模板引擎-FreeMarker
  4. 编译Cocos2dx程序 (一)
  5. shell脚本 8种字符串截取的方法
  6. 教你一招“恶意修改主页”的处理办法
  7. win7+iis7.5下的asp.net网站发布系列问题
  8. BCH热门应用SLP发币系统逐渐走向成熟
  9. 第11章 假如没有编程 《丰富多彩的编程世界》
  10. Charles抓取微信小程序数据 以及 其它应用网站数据