0

ストアドプロシージャを使用せずに、ObjectDataSourceにバインドされたGridViewのカスタムページングを実装するにはどうすればよいですか?

ユーザーがいくつかのフィルターを適用してカスタム検索を作成できる検索画面があります(「すべて」以外の値を選択したものごとにいくつかのDropDownListコントロールを使用します。の「where」句にフィルターを追加する必要があります。 SQLステートメント)。

SQLクエリを動的に構築したい。通常、私はストアプロシージャを使用し、ROW_NUMBER()を使用します(ここを参照)。しかし、c#コードレベルでページングを実装するにはどうすればよいですか?

そうする方法はありますか?それとも、ストアドプロシージャ内に動的SQLを実装する唯一のオプションですか(ここを参照)?

ありがとう

4

1 に答える 1

1

ListView基本的に、および でページングを有効にするとObjectDataSource、データ ソースは現在のページ番号とページ サイズをデータ プロバイダー クラス ( で設定したクラス) に渡しますObjectDataSource

これが実際の例です:

http://netpl.blogspot.com/2009/04/how-to-controll-aspnet-listview-page.html

具体的には、データ プロバイダー クラスを見てくださいPersonDataSource

public class PersonDataSource
{
    public IEnumerable<Person> Retrieve( int StartRow, int RowCount )
    {
        return DataModel.Instance.Persons.Skip( StartRow ).Take( RowCount );
    }

    public int CountItems()
    {
        return DataModel.Instance.Persons.Count;
    }
 }

プロバイダーは自由に実装できます。つまり、オブジェクトをメモリから取得したり、データベースから取得したり、ORM を使用したり、SqlCommand. 制限なし。

アプリケーション レベルでページングを実装するのではなく、ページングされたクエリを作成します。アプリケーション レベルでのページングとは、データベースからデータを取得し、アプリケーション レベルでフィルター処理することを意味します。これは通常、データベース レベルでのフィルター処理よりもパフォーマンスの点で劣ります。

独自のページング クエリを作成する場合は、ROW_NUMBER を使用するかどうかに関係なく、少なくともいくつかの方法があります。

于 2012-09-09T13:32:24.277 に答える