WizardWu 编程网
一位台湾的程序员,研究 OOD、.NET 平台在企业信息化之应用、WCF & 工作流、性能调优、数据库。
博客园
首页
新随笔
联系
订阅
管理
87 Posts :: 0 Stories :: 999 Comments :: 35 Trackbacks
公告
*
ADO.NET/数据库 - 博客园小组
*
英文、简体正体 IT 词汇对照表
*
WizardWu 編程網 (正體中文)
*
資料庫之道 (Facebook)
昵称:
WizardWu
园龄:
3年8个月
荣誉:
推荐博客
粉丝:
104
关注:
5
搜索
常用链接
我的随笔
我的评论
我的参与
最新评论
我的标签
最新随笔
1. 探讨 T-SQL 的 EXISTS、EXCEPT、INTERSECT 算符
2. WCF 笔记 (3) - 懶人验证法与 MessageContract
3. 小公司的 ERP 或数据库, 该用 PC 还是 Server
4. 双屏开发
5. WCF 4 安全性和 WIF 简介
6. 国际财务报告准则 IFRS 与信息系统
7. 以 .NET 创建 Code 39 条码图片 供水晶报表打印
8. 快速搞懂 SQL Server 的锁定和阻塞
9. 微软 .NET 推出十年回顾
10. 探讨 .NET 4 新增的 SortedSet 类
随笔分类
(107)
ADO.NET(11)
ASP.NET 2.0 & Ajax(15)
ASP.NET 3.5 & Ajax(7)
ASP.NET MVC(1)
ASP.NET 架构设计(4)
ASP.NET 控件开发(3)
BizTalk(1)
CSS & Script(3)
Design Patterns(5)
dotNET Mobile(1)
dotNET 程序语言(8)
dotNET 其他技术(5)
ERP & 信息化(4)
Oracle 数据库(5)
SQL Server BI
SQL Server 管理
SQL Server 开发(3)
SQL 综合 & 性能调优(4)
WCF(6)
WF & 工作流(2)
WIF(1)
报表(1)
财务会计(1)
操作系统 & 网络(4)
谈天说地(10)
图表(1)
云计算(1)
随笔档案
(87)
2011年10月 (1)
2011年1月 (2)
2010年12月 (1)
2010年10月 (1)
2010年9月 (2)
2010年8月 (1)
2010年6月 (3)
2010年5月 (1)
2010年4月 (1)
2010年3月 (4)
2010年2月 (3)
2009年12月 (2)
2009年9月 (1)
2009年8月 (2)
2009年7月 (2)
2009年6月 (3)
2009年5月 (2)
2009年4月 (1)
2009年3月 (2)
2009年2月 (2)
2009年1月 (5)
2008年12月 (4)
2008年11月 (7)
2008年10月 (3)
2008年9月 (3)
2008年8月 (4)
2008年7月 (19)
2008年6月 (5)
积分与排名
积分 - 270933
排名 - 270
最新评论
阅读排行榜
评论排行榜
推荐排行榜
ASP.NET 数据分页第三篇 - 结合 Custom Control 处理 GridView 的 UI 呈现
延续本系列前两篇帖子「
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
可能无法立刻修正,敬请见谅。
绿色通道:
好文要顶
关注我
收藏该文
与我联系
posted on 2008-09-07 17:08
WizardWu
阅读(2957)
评论(7)
编辑
收藏
Feedback
1572194
#1楼
2008-09-07 18:09
金色海洋(jyk)
我一般是只看内容,不看作者的,原来前面那两篇都是lz写的呀。
这篇没细看,先支持一把。感谢分享。
回复
引用
查看
#2楼
[
楼主
]
2008-09-08 00:47
WizardWu
补充:
引用此 WizardGridView,建议不要将 AutoGenerateColumns 设为 True,否则在搭配 HTML 的 table、tr、td 排版时,偶尔会出现版面异常的情况。
建议如本帖图 4 中,将 AutoGenerateColumns 设为 False,透过 BoundField,逐一设定数据表中,要显示在 GridView 里的各个 field。
回复
引用
查看
#3楼
2008-09-08 17:20
风易在线
呵呵,把你這個WizardGridView的源程式也放上來看一下啊。
回复
引用
查看
#4楼
[
楼主
]
2008-09-08 17:39
WizardWu
>>下载示例中,ObjectDataSource、WizardGridView 两个活页夹里,内附这个 WizardGridView 的源代码。
回复
引用
查看
#5楼
2009-06-30 14:58
ivanbf
不知道怎么把分页 放下面 PagerSettings Position="Bottom" 也不行
在设计页面是居下的 但在浏览器中显示就跑上面去了 *-*
回复
引用
#6楼
[
楼主
]
2009-06-30 19:16
WizardWu
您好:
我记得当初在写这个 WizardGridView 自定义控件时,已写死「分页列」一定要在上面。当初设计,是怕一页的列数太多时,用户在网页上,无法直接看到「分页列」。
除非您自行修改源代码,或回头用微软的 GridView 控件的阳春分页介面。
本系列文章第四篇:
http://www.cnblogs.com/WizardWu/archive/2008/09/28/1301616.html
自修改源代码方式(未实际试过):
WizardGridView.cs,把自定义的函数 CreateCustomPager(),不要在 GridView 的 InitializePager 就被调用,改在生命周期的最后再调用。
回复
引用
查看
#7楼
2009-07-01 09:29
ivanbf
谢谢楼主的解答 O(∩_∩)O~
回复
引用
注册用户登录后才能发表评论,请
登录
或
注册
,
返回博客园首页
。
首页
博问
闪存
新闻
园子
招聘
知识库
最新IT新闻
:
·
谷歌将出售Clearwire股份 不到收购价1/10
·
为什么Google比苹果更令微软恐惧?
·
思科拟2.71亿美元收购私有公司Lightwire
·
社交商务公司Bazaarvoice将于2月24日进行IPO
·
戴尔收购备份软件公司AppAssure
»
更多新闻...
最新知识库文章
:
·
领域模型管理与AOP
·
编程的艺术:漂亮的代码和漂亮的软件
·
GIT分支管理是一门艺术
·
编程:是一门艺术
·
编程是一门艺术吗?
»
更多知识库文章...
China-pub 2011秋季教材巡展
China-Pub 计算机绝版图书按需印刷服务
Powered by:
博客园
Copyright © WizardWu