数据源控件(ObjectDataSource, SqlDataSource)数据统计

1. 问题的提出:  

  我们通获取一些表格控件诸如: GridView, DataGridView中的数据做一些统计. 例如下图 上部分的经费总数部分就是从表格控件中得到的统计结果.

然而发现了 GridView的一个瓶颈: 当取出的数据较多, 表格控件需要分页的时候, 无法得出正确数据,即只能统计当前页的数据列. 这个是比较伤脑筋的.原来通过 GridView的DataSourceID绑定到数据源控件中, 每次分页都会以只进行的方式从数据源控件中读取数据,然后填充该分页.所以得到了错误的结果.

2. 解决方案:

 要想获取所有数据行的统计信息, 又该怎么办呢, "百查不得其解",  无意中查阅MSDN发现了ObjectDataSourceStatusEventArgs 这个类.

该类描述如下:

ObjectDataSource 控件的 SelectedInsertedUpdatedDeleted 事件提供数据。

命名空间:System.Web.UI.WebControls
程序集:System.Web(在 system.web.dll 中)

类型ObjectDataSourceStatusEventArgs 描述如下:

 名称 说明
Public method ObjectDataSourceStatusEventArgs 已重载。初始化 ObjectDataSourceStatusEventArgs 类的新实例。
页首

Collapse 图像 公共属性

 名称 说明
Public property AffectedRows 获取或设置受数据操作影响的行的数目。
Public property Exception 获取在数据操作期间由 ObjectDataSource 控件调用的方法所引发的任何异常的包装。
Public property ExceptionHandled 获取或设置一个值,该值指示业务对象引发的异常是否已得到处理。
Public property OutputParameters 获取包含业务对象方法参数及其值的集合。
Public property ReturnValue 获取由业务对象方法(如果有)作为对象返回的返回值。
页首

Collapse 图像 公共方法 (请参见 受保护的方法

 名称 说明
Public method Equals   已重载。 确定两个 Object 实例是否相等。 (从 Object 继承。)
Public method GetHashCode   用作特定类型的哈希函数。 GetHashCode 适合在哈希算法和数据结构(如哈希表)中使用。 (从 Object 继承。)
Public method GetType   获取当前实例的 Type 。 (从 Object 继承。)
Public method Static ReferenceEquals   确定指定的 Object 实例是否是相同的实例。 (从 Object 继承。)
Public method ToString   返回表示当前 Object 的 String 。 (从 Object 继承。)
页首

Collapse 图像 受保护的方法

 名称 说明
Protected method Finalize   允许 Object 在“垃圾回收”回收 Object 之前尝试释放资源并执行其他清理操作。 (从 Object 继承。)
Protected method MemberwiseClone   创建当前 Object 的浅表副本。 (从 Object 继承。)
页首

Collapse 图像 请参见

通过 Selected方法访问ReturnValue 属性我们就可以获取ObjectDataSource中的数据表视图或 业务方法返回的强类型集合

List<Class T>

3. 具体做法:

在ObjectDataSource控件的属性中附加 Selected事件:

4. 总结:

  protected   void  ObjectDataSource1_Selected( object  sender, ObjectDataSourceStatusEventArgs e)
    
{
       
//强制转换为List<Model>的强类型集合
        List<Model> list = (List<Model>)e.ReturnValue;
        
if (list == null)
        
{
            count 
= 0;
        }

        
else
        
{
            count 
= list.Count;
            
for (int i = 0; i < count; i++)
            
{
                zjf 
+= Convert.ToDouble(list[i].Zjf);
                jhbk 
+= Convert.ToDouble(list[i].Jhbk);
                bmpt 
+= Convert.ToDouble(list[i].Bmpt);
                qyzc 
+= Convert.ToDouble(list[i].Qyzc);
                jhhb 
+= Convert.ToDouble(list[i].Jhhb);
                sjbk 
+= Convert.ToDouble(list[i].Sjbk);

            }

            Label3.Text 
= zjf.ToString();
            Label4.Text 
= jhbk.ToString();
            Label5.Text 
= bmpt.ToString();
            Label6.Text 
= qyzc.ToString();
            Label8.Text 
= jhhb.ToString();
            Label9.Text 
= sjbk.ToString();
            Label7.Text 
= count.ToString();
        }



    }

 

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值