У меня есть собственный 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);
}