私はこの質問をいくつかの方法で尋ねようとしました。何が起こっているのかを理解する必要があるため、答えるのが難しい質問です。
GridView を埋めるのはいつですか?
PostBackでないPage_Load
場合、ニーブの答えは duringです。
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
DataSet ds = GetStuffToShow();
GridView1.DataSource = ds;
GridView1.DataBind();
}
}
問題は、ポストバックの場合、グリッドが満たされないことです。グリッドが塗りつぶされていないのは、グリッドのビューステートをオフにしたためです。
だから IsPostBack を見ないでください
ポストバックの有無にかかわらず、常にグリッドを埋める必要があります。
protected void Page_Load(object sender, EventArgs e)
{
DataSet ds = GetStuffToShow();
GridView1.DataSource = ds;
GridView1.DataBind();
}
これに関する問題は、ユーザーが列をソートすると、との両方の後OnSorting
にイベントが呼び出されることです。Page_Init
Page_Load
protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
{
DataSet ds = GetStuffToShow(e.SortExpression, e.SortDirection);
GridView1.DataSource = ds;
GridView1.DataBind();
}
必要なデータベース クエリは 1 つだけでしたが、2 つのデータベース クエリを実行しました。
キャッシュは列の並べ替えに適しています
列の並べ替え中に無効なキャッシュを受け入れる場合は、他の操作でキャッシュを無効にする限り、セッション変数に格納できます。DataSet
問題は、OnSorting
イベントが必要になった後に呼び出されることです ( Page_Load
):
protected void Page_Load(object sender, EventArgs e)
{
if (AGridViewOnSortingEventIsntBeingRaised)
{
DataSet ds = GetStuffToShow();
StoreTheDatasetInTheSessionSomehowInCaseTheyCallSortInTheFuture(ds);
GridView1.DataSource = ds;
GridView1.DataBind();
}
}
protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
{
DataSet ds = GetDataSetOutOfSessionSomehowThatDamnWellBetterBeThere();
SomehowSortAReadOnlyDisconnectedDataSet(ds, e.SortExpression, e.SortDirection);
GridView1.DataSource = ds;
GridView1.DataBind();
}
未知への恐怖
次に、GridView のビューステートをオフにしたため、まだ恐怖があります。asp:GridView
サーバーから(またはメモリから)再構築できる場合、読み取り専用に数十キロバイトのbase64エンコードが必要だとは思いません。
GridView
しかし、ページが最後にレンダリングされたときの状態に戻す義務があると思います。そして、私は前に Page_Load
(つまり、中にPage_Init
)それをしなければなりません。誰かがそう言ったので、私はこの恐怖を持っています。だから私はそれを
protected void Page_Init(object sender, EventArgs e)
{
if (AGridViewOnSortingEventIsntBeingRaised)
{
DataSet ds = GetStuffToShow();
StoreTheDatasetInTheSessionSomehowInCaseTheyCallSortInTheFuture(ds);
GridView1.DataSource = ds;
GridView1.DataBind();
}
}
これに関する問題はGetStuffToShow
、ユーザーがテキスト ボックスに入力した内容に依存することです。Page_Init
とにかくダラダラしています。ここは暑すぎる。asp.netに対する私の他の 最近の 不満とは異なり、この質問が答えられることを願っています。