我有一个自定义的 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);
}