0

SqlDataSources からの行数を自動的にグリッドに入れるカスタム GridView があります。以下のコードでそのカウントを計算します。この質問は、ページレベルのものではなく、継承されたカスタム GridView コントロールに関連していることに注意してください。

「IEnumerable」が ObjectDataSource であることを PerformDataBinding で認識するにはどうすればよいですか? ObjectDataSource の型を具体的に調べて、その「総行数を取得」関数を呼び出したいと思います。

その理由は、合計行数が (たとえば) 数百万であるためです。現時点では、ICollection 句はデータベースから取得されたものの数を返します。これは通常、データの「1 ページ」であるため、(たとえば) 20 です。レコードは 20,000,000 ではありません!

私は特定の ObjectDataSource タイプをいくつかしか持っていないので、この IEnumerable のものからそれらの名前を見つける方法を知っていれば、それらを 1 つずつ選択できます。

この回答を確認しました: 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 に答える