两年前初学.NET时写的关于DataGrid的笔记

    前两天有点空,开始看看ASP.NET。
    在使用DataGrid的时候遇到几个小问题,当使用DataGrid来显示数据,如果数据量很大需要
自己来控制分页,而这个分页实现还比较麻烦。
    一般的情况下,每当DataGrid输出一个页面,它所指定的Data source其实包含了所有的记录。比如你的Data Source有10000条记录,虽然用DataGrid只是输出了一个记录数为10的页面,
但是它的Data Source还是已经包含了10000条记录,这对性能影响非常大。所以需要找到一种
解决方法。  
    将DataGrid的AllowPaging属性设为True就可以使用分页的功能了,我们可以用PageSize来
控制页面的记录数,其默认值为10。CurrentPageIndex属性指定当前的所显示页面。我们需要
自定义分页,每次只获取需要显示的数据,这需要将AllowPaging与AllowCustomPaging都设置为
True,然后再处理PageIndexChanged事件。该事件有一个参数为DataGridPageChangedEventArgs
对象,使用该对象的NextPageIndex属性我们能获知用户所选择的页面,然后根据NextPageIndex
来设置CurrentPageIndex。接着需要创建一个Data Source来获取指定数据,绑定到DataGrid控件上。
    在上面这个步骤中,重点在于如何根据用户选择的页面参数来获取指定的数据,比如在10000条满足条件的记录中,用户选择了第8页(每页显示20条记录),我们如何才能检索出指定的
记录。这类似与以前的我们讨论的分页(分段)显示、获取数据。
    但是问题并没有就此结束,在ASP.NET中每个Server Control都有一个ViewState的属性,
通过EnableViewState来控制其开关。这个属性是用来表示控件的状态。比如使用IE访问一个
ASP.NET写的页面,我们在IE的查看菜单中选择“源文件”,在源文件中可以看有一个“__VIEWSTATE”,
它是一串长长的加密字符。这个就是ASP.NET在客户端所保存的Server Control的ViewState。
当我们使用DataGrid来显示数据,ASP.NET将会产生大量的数据来保存DataGrid的ViewState,
每次需要发送给Client,当PostBack的时候,这些ViewState同时也会PostBack,这严重的影响
了性能。如果我们把DataGrid的EnableViewState属性关闭,在Client选择指定页面时,我们会
发现新的页面中根本没有DataGrid显示,而且PageIndexChanged事件根本没有触发。这是因为
每次页面PostBack时需要根据DataGrid的ViewState来重建DataGrid,现在我们关闭了该属性,
所以PageIndexChanged事件就不会被触发了。也就是说我们不能在PageIndexChanged事件中控制
分页数据的获取以及显示了。对此我们可以在PageIndexChange事件之前,重新构造DataGrid,
这样就可以正常触发此事件。
    还遇到一个问题,当使用DataGrid来显示数据,我们需要删除记录的时候没有提示。以前
用ASP的时候,可以非常方便的添加Client Side的javascript脚本。现在我们需要在ASP.NET
中通过RegisterClientScriptBlock等方法来解决该问题。
posted on 2005-06-08 17:51  心~动  阅读(596)  评论(0编辑  收藏  举报