3

データのページングを実現するためにasp.netで解決策を見つけようとしています。1)アプリケーションは、結果のセット全体またはページングされたセットのみを取得するために、ページインデックスの変更ごとにDBに接続する必要はありません2 )結果をViewstateまたはSessionに保存したくない

大規模な結果セットの場合、キー値(ID、行番号)を結果セット(配列、json)に格納してから、行バインディングに関する追加の行情報を入力することを考えていました。

asp.netでそれを行う方法はありますか、またはこのシナリオではjQueryを検討する必要があります。

4

3 に答える 3

6

1)アプリケーションは、結果のセット全体またはページ化されたセットのみを取得するために、ページインデックスが変更されるたびにDBに接続する必要はありません。

結果をキャッシュする必要があります。例えば:

例:

キャッシングアプローチ1

    <asp:SqlDataSource runat="server" ID="sdsd"
        SelectCommand="select * from jobs"
        SelectCommandType="Text"
        DataSourceMode="DataSet"
        ConnectionString="<%$ConnectionStrings: PUBSConnectionString %>"
        CacheDuration="30"
        EnableCaching="true"
    >
    </asp:SqlDataSource>
    <asp:DropDownList ID="ddl" runat="server" AutoPostBack="true" DataSourceID="sdsd" DataTextField="job_desc" DataValueField="job_id">
    </asp:DropDownList>

キャッシングアプローチ2

結果はいつでもコードにキャッシュできます。

protected void Page_Load(object sender, EventArgs e)
{
    if (!this.IsPostBack)
    {
        IEnumerable<employee> res = Enumerable.Empty<employee>();

        if (this.Cache["emp"] == null)
        {
            res = this.GetEmployeesFromDatabase();
            this.Cache["emp"] = res;
        }
        else
        {
            res = this.GetEmployeesFromCache();
        }

        this.grv.DataSource = res;
        this.grv.DataBind();
    }
}

protected IEnumerable<employee> GetEmployeesFromDatabase()
{
    // go to your database to get the objects
    return Enumerable.Empty<employee>();
}

protected IEnumerable<employee> GetEmployeesFromCache()
{
    return this.Cache["emp"] as IEnumerable<employee>;
}

キャッシュ結果に並べ替え機能を追加するには、返されるオブジェクトがまたはである必要があることに注意DataSetしてください。DataTable

2)結果をビューステートまたはセッションに保存したくない

ここでも、キャッシュを使用する必要があります

asp.netでそれを行う方法はありますか、またはこのシナリオではjQueryを検討する必要があります。

jQuery(それ自体)が要件にどのように役立つかわかりません。つまり、AJAX投稿を使用すると、現在のページの知覚パフォーマンスが向上しますが、データベースへの接続には役立ちません。キャッシングを使用しない限り

于 2012-07-22T16:40:38.240 に答える
2

それがすべての要件をカバーしているかどうかはわかりませんが、ページングの場合はPagedDataSourceクラスです

データバインドされたコントロール(DataGrid、GridView、DetailsView、FormViewなど)のページング関連のプロパティをカプセル化して、ページングを実行できるようにします。このクラスは継承できません。

それ以外の場合は、 JqGridを調べることをお勧めします

于 2012-07-22T16:40:13.623 に答える
1

ページデータセットの場合、通常2つのオプションがあります。

  • 小さな結果セットを期待している場合(つまり、検索結果を500行以下に制限する場合)、viewstateの使用は完全に許容されます。私は個人的に、リクエストレベルのデータを保存するためにセッションを使用することを避けたいと思っています

    • 大きな結果セットを期待している場合は、ページングされたデータソースが必要になります。ページングされたデータセットを返す(つまり、ページインデックス/ページサイズを渡す)ストアドプロシージャを作成するか、ORM(ENTITYFrameworkまたはLINQTO SQL)のいずれかを使用できます。take(n)とskip(n)のいずれかでページングをサポートします。

http://www.mssqltips.com/sqlservertip/1699/sql-server-stored-procedures-to-page-large-tables-or-queries/

http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/sorting-filtering-and-paging-with-the-entity-framework-in-an-asp-net- mvc-application

データのレンダリング方法(jQuery / ajaxまたはサーバーコントロール)に関係なく、結果セット全体を一度に取得して後続のリクエスト(json配列またはビューステート)用にキャッシュするか、ページングをサポートするデータソースが必要です。 。パフォーマンスに関心がある場合は、ページ化されたデータソースが最適です(EFの例はWebフォームでも問題なく機能し、MVCのアクションメソッドの代わりにイベントハンドラーを使用するだけです)。

于 2012-07-23T03:25:54.457 に答える