PerformDataBinding, извлечение количества строк из ObjectDataSource - PullRequest
0 голосов
/ 13 октября 2011

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

1 Ответ

0 голосов
/ 16 февраля 2012

Просто перечислите без приведения.

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

            base.PerformDataBinding(data);
        }
...