欢迎来到.net学习网

欢迎联系站长一起更新本网站!QQ:879621940

您当前所在位置:首页 » ASP.Net » 正文

热门阅读

DataGrid Web控件运作机制探秘

创建时间:2011年06月16日 22:55  阅读次数:(5066)
分享到:

DataGridWeb控件是三个ASP.NET数据Web控件中功能最多的。正如前文所述,DataGridWeb控件从WebControl类中诞生,因此可以指定自己想要的样式。但是在自定义控件生成的实际HTML 标记时,它又是最不灵活的。呈现的HTML 标记中的这种不灵活性,是由于DataGrid是设计用于使用HTML< table>以表格形式显示数据所造成的。因此,对于每一条绑定到DataGrid的记录,都会创建一个单独的表行(<tr>),对于要显示的记录中的每一个字段,都会创建一个单独的表列(< td>)。

DataGridWeb控件提供了许多功能,可极大地提高要显示的数据的可用性。例如,把DataGrid的AllowSorting属性设置为 True 并添加一点源代码,开发人员就可以把一个普通的DataGrid变成一个其数据可以由最终用户排序的DataGrid。另外,再增加一点工作量,开发人员就能增强DataGrid的功能以允许数据分页或数据的内联编辑。这些功能明显增强了DataGrid的可用性。

除了在可用性方面得分很高,DataGrid还提供了很短的开发时间。要使用DataGrid开始在 ASP.NET Web 页面中显示数据,只需要把DataGrid添加到Web页面中并编写两行必要的代码: 第一行把数据绑定到DataGrid的DataSource,第二行调用DataGrid的DataBind()方法。显然,随着添加到DataGrid中的功能数量的增加,开发时间也增加了,但这只是把开发时间和其他数据 Web 控件进行比较。假设您要允许对Repeater 显示的数据进行排序。添加这样的功能是一定可能的,但是与用DataGrid完成同样的操作相比,这需要明显多很多的时间和精力。

尽管DataGrid具有良好的可用性和开发时间得分,但是这个控件有两个固有的缺点。第一,正如前面所谈到的,DataGrid在对所呈现的HTML 标记进行自定义方面的功能很有限。是的,您可以自定义DataGrid的不同行和列的字体、颜色和边框,但是事实仍然是,当DataGrid显示数据时,结果将是一个HTML< table>,DataSource中的每一条记录都对应其中一个<tr>,每一个字段都对应其中一个<td>。

具体地说,DataGrid中的每一列都是一个从DataGridColumn类中派生的类实例。有五个内置的DataGrid列类型:
1,BoundColumn
2,ButtonColumn
3,EditColumn
4,HyperLinkColumn
5,TemplateColumn

每一个列类型都提供数据或提供某种允许用户和DataGrid进行交互的接口。例如,BoundColumn以纯文本显示DataSource字段的值,而HyperLinkColumn则会显示一个超级链接,其文字和 URL 部分可能是DataSource字段。除了这些内置的列类型,通过创建DataGridColumn类的派生类,还可以创建自定义DataGrid列类型。

有了这么多的DataGrid列类型,可能就不理解为什么DataGrid呈现的HTML 标记不能进行高度自定义了。要知道,虽然每一个DataGrid列类型在呈现时生成不同的HTML,但是每一列都包含在一组<td>标记中,每一行都包含在一组<tr>标记中。因此,即使可以用 TemplateColumn 自定义每一行的特定列的HTML 输出,而DataGrid仍然呈现为HTML<table>,其中每一行使用一个<tr>,每一列使用一个<td>。DataGrid的这种限制禁止了更多具有创造性的数据显示。例如,如果要在每一表行中显示五条记录,就不能使用DataGrid,必须使用DataList或Repeater。另外,如果要在除<table>之外的HTML标记中显示数据,很遗憾,就不能使用DataGrid了。

DataGrid第二个缺点是它的性能。DataGrid是这三个数据 Web 控件中性能最差的。基于这一点,由DataGrid- 特别是具有许多行的DataGrids - 产生的 ViewState 可能会非常大。如果使用DataGrid仅仅是为了显示数据,则可以关闭 ViewState,但是,使用DataGrid的排序、分页或编辑功能时,就不能这样做了。

为了测试DataGrid的性能,我使用了 Microsoft 的免费 Web Application Stress Tool (WAST)。在本文最后的“基准设置”一节中列出了精确的测试条件和 WAST 设置。另外,测试使用的代码也可在本文最后下载。

这个 Web Application Stress Tool 会向 Web 服务器发出一组特定的URL请求。对于每一项测试,我都在一分钟之内尽可能快地不断请求一个URL。WAST 报告了许多性能衡量标准;我要关注的一个衡量标准是每秒请求数,它表明了Web服务器每秒能执行多少次 ASP.NET Web 页面。

对于一个仅显示数据的简单DataGrid,运行了两个测试。具体地说,DataGrid显示了来自 Northwinds 数据库的Customers表(Customers表总共包含 91 条记录)的四个字段。DataGrid的AutoGenerateColumns属性设置为 True。第一项测试把DataGrid放在一个 Web 窗体(<form runat="server">)中,而第二项测试则没有。如果在窗体中放置一个控件而不把它的 EnableViewState属性显式设置为 False,那么该控件则会用 ViewState 保持它的状态。创建这个 ViewState 项可能是一个比较费时的过程,因此减少了可处理的总的每秒请求数,结果如下图所示。

DataGrid的每秒请求数 

应该说,DataGridWeb控件的性能并不是很理想。

0
来源:
说明:所有来源为 .net学习网的文章均为原创,如有转载,请在转载处标注本页地址,谢谢!
【编辑:Wyf

打赏

取消

感谢您的支持,我会做的更好!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

最新评论

共有评论0条
  • 暂无任何评论,请留下您对本文章的看法,共同参入讨论!
发表评论:
留言人:
内  容:
请输入问题 11+28=? 的结果(结果是:39)
结  果: