ドロップダウンに基づいてグリッドビューに結果の数を表示しますか?

StackOverflow https://stackoverflow.com/questions/417988

質問

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

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

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

役に立ちましたか?

解決

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)

他のヒント

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

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

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

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

何かのようなもの:(3ページ目選択の場合、1ページあたり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
)

明らかに、並べ替えなどに関してさらに注意を払う必要があります。

これが私がやることだ。最初に、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に直接バインドするだけです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top