1

約30,000レコードを返すデータテーブルがあります。これらのレコードをASP:GridViewコントロールに表示しています。ユーザーがGridViewに表示するレコードの数を選択できるようにするドロップダウンコントロールがあります。デフォルトはAllである必要がありますが、たとえば20、50、100などの値を指定することもできます。これを行う方法がよくわかりません。

ページングをオンにしていない場合はどうなりますか。PageSizeは引き続き機能しますか?

GridView.PageSize = 1をハードコーディングしましたが、それでもすべてのレコードが返されました。

4

5 に答える 5

2

gridviewのPageSizeプロパティを使用します。リンク

于 2009-01-06T20:29:18.680 に答える
2

ドロップダウンの値(20、50、100)をクエリに追加して、上位(20、50、100)のレコードのみを選択することができます。

ページングも使用しますか?

于 2009-01-06T20:31:23.310 に答える
2

ページングは​​、データ選択のできるだけ早い段階で常に処理する必要があります。DB からアプリ サーバーに 30,000 レコードを取得して、そのうちの 50 レコードのみを表示することは望ましくありません。

次のようなもの: (ページ 3、ページあたり 50 を選択する場合)

select top 50 from x where pk not in (select top 100 pk from x)

これは次のように変換されます。

CREATE PROCEDURE sspGetItems (@pageSize int, @pageNum int)
AS
SELECT TOP @pageSize 
FROM x
WHERE pk NOT IN 
(
 SELECT TOP (@pageNum - 1) * @pageSize pk FROM x
)

明らかに、ソートなどについてもっと注意を払う必要があります。

于 2009-01-06T22:16:51.303 に答える
2

PageSize が機能するようにするには、GridView の AllowPaging を true に設定する必要があります。明らかに、イベント PageIndexChanging を管理するメソッドを作成する必要があります。

このような:

protected void myGvw_OnPageIndexChanging(object sender, GridViewPageEventArgs e) 
{
     myGvw.PageIndex = e.NewPageIndex;
     // then recall the method that bind myGvw
}

DropDown はプロパティ AutoPostBack を true に設定することができ、その OnSelectedIndexChanged で設定する必要があります

myGvw.PageSize = Convert.ToInt32(myDropDown.SelectedValue)
于 2009-01-07T01:09:12.827 に答える
1

これが私がすることです。最初に、DataTable に列を追加します。列が存在しない場合はカウンターとして機能します。次に、GridView を DataView にバインドします。私が話していることを示すコードを次に示します。

            //add column with counter
            table.Columns.Add("counter", typeof(int));
            for (int i = 0; i < table.Rows.Count; i++)
            {
                table.Rows[i]["counter"] = i+1;
            }

次に、DataTable から既定のビューを取得し、RowFilter を設定します。

            DataView view = table.DefaultView;
            view.RowFilter = "counter <= 100"; //or whatever number the user selected

最後に、GridView を DataView に直接バインドするだけです。

于 2009-01-06T20:47:09.657 に答える