1. 问题的提出:
我们通获取一些表格控件诸如: GridView, DataGridView中的数据做一些统计. 例如下图 上部分的经费总数部分就是从表格控件中得到的统计结果.
然而发现了 GridView的一个瓶颈: 当取出的数据较多, 表格控件需要分页的时候, 无法得出正确数据,即只能统计当前页的数据列. 这个是比较伤脑筋的.原来通过 GridView的DataSourceID绑定到数据源控件中, 每次分页都会以只进行的方式从数据源控件中读取数据,然后填充该分页.所以得到了错误的结果.
2. 解决方案:
要想获取所有数据行的统计信息, 又该怎么办呢, "百查不得其解", 无意中查阅MSDN发现了ObjectDataSourceStatusEventArgs 这个类.
该类描述如下:
为 ObjectDataSource 控件的 Selected、Inserted、Updated 和 Deleted 事件提供数据。
命名空间:System.Web.UI.WebControls
程序集:System.Web(在 system.web.dll 中)
类型ObjectDataSourceStatusEventArgs 描述如下:
名称 | 说明 | |
---|---|---|
ObjectDataSourceStatusEventArgs | 已重载。初始化 ObjectDataSourceStatusEventArgs 类的新实例。 |
公共属性
名称 | 说明 | |
---|---|---|
AffectedRows | 获取或设置受数据操作影响的行的数目。 | |
Exception | 获取在数据操作期间由 ObjectDataSource 控件调用的方法所引发的任何异常的包装。 | |
ExceptionHandled | 获取或设置一个值,该值指示业务对象引发的异常是否已得到处理。 | |
OutputParameters | 获取包含业务对象方法参数及其值的集合。 | |
ReturnValue | 获取由业务对象方法(如果有)作为对象返回的返回值。 |
公共方法 (请参见 受保护的方法 )
名称 | 说明 | |
---|---|---|
Equals | 已重载。 确定两个 Object 实例是否相等。 (从 Object 继承。) | |
GetHashCode | 用作特定类型的哈希函数。 GetHashCode 适合在哈希算法和数据结构(如哈希表)中使用。 (从 Object 继承。) | |
GetType | 获取当前实例的 Type 。 (从 Object 继承。) | |
ReferenceEquals | 确定指定的 Object 实例是否是相同的实例。 (从 Object 继承。) | |
ToString | 返回表示当前 Object 的 String 。 (从 Object 继承。) |
受保护的方法
名称 | 说明 | |
---|---|---|
Finalize | 允许 Object 在“垃圾回收”回收 Object 之前尝试释放资源并执行其他清理操作。 (从 Object 继承。) | |
MemberwiseClone | 创建当前 Object 的浅表副本。 (从 Object 继承。) |
请参见
通过 Selected方法访问ReturnValue 属性我们就可以获取ObjectDataSource中的数据表视图或 业务方法返回的强类型集合
List<Class T>
3. 具体做法:
在ObjectDataSource控件的属性中附加 Selected事件:
4. 总结:




































通过这种方法, 我们就无须再在 业务逻辑层再次抽取数据统计了, 提高了系统效率.