0

我有一个自定义的 GridView,它会自动将 SqlDataSources 中的行数放入网格中。它在下面的代码中计算该计数。请注意,这个问题与自定义继承的 GridView 控件有关,而不是页面级的东西。

如何在 PerformDataBinding 中识别“IEnumerable”事物是 ObjectDataSource?我想具体找出它是什么 ObjectDataSource 类型,然后调用它的“获取总行数”函数。

原因是总行数是(比如说)数百万,而目前 ICollection 子句返回从数据库中检索到的内容的计数,这通常是“一页”数据,所以(比如说)20记录不是 20,000,000!

我只有几个特定的​​ ObjectDataSource 类型,所以如果我知道如何从这个 IEnumerable 事物中找到它们的名称,我可以一一挑选出来。

我已经查看了这个答案: 如何获取 ObjectDataSource 的行数, 但我不知道如何计算出我正在处理的精确 BLL。调试器在这个对象中有很多东西,但我看不到我想要的东西。

protected override void PerformDataBinding(IEnumerable data)
{
   // This does not work for my Object Data Sources, which return one page of 
   // records only, not the whole set. There must however be a way...
   if (data is IListSource)
   {
      IListSource list = (IListSource)data;
      rowcount = list.GetList().Count;
   }
   else if (data is ICollection)
   {
      ICollection collection = (ICollection)data;
      rowcount = collection.Count;    
   }
   base.PerformDataBinding(data);
}
4

1 回答 1

0

只需枚举而不进行强制转换。

protected override void PerformDataBinding(IEnumerable data)
        {
            var enum1 = data.GetEnumerator();
            int count = 0;
            while (enum1.MoveNext())
            {
                count++;
            }
            this.TotalRecordCount = count;

            base.PerformDataBinding(data);
        }
于 2012-02-16T16:07:35.860 回答