ドロップダウンに基づいてグリッドビューに結果の数を表示しますか?
質問
約 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に直接バインドするだけです。