このテクニックは、ページングでGridView CheckBoxの状態を維持すると呼ばれます。これを達成するための1つの方法は、以下の通りである。
- チェックインされた行に関連するデータキーを格納するintまたはstringのGenric Listを作成します。
- PageIndexを新しいインデックスに設定する前にPageIndexChangingを実行します。 GridViewの各行について
- チェックボックスをオンにすると、idをジェネリックリストに格納します。
- チェックボックスがオフになっている場合& IDがジェネリックリストに存在する場合は、リストから削除します。
- RowDataBoundイベントで、各DataRowに対して、DataKeyNameがGeneric Listに存在するかどうかを確認します。その場合は、CheckBoxを見つけてチェックします。
製品表と簡単な例は、Northwindデータベースは
private List<int> ProductIDs
{
get
{
if (this.ViewState["ProductIDs"] == null)
{
this.ViewState["ProductIDs"] = new List<int>();
}
return this.ViewState["ProductIDs"] as List<int>;
}
}
protected void gvProducts_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
foreach (GridViewRow gvr in gvProducts.Rows)
{
CheckBox chkSelect = gvr.FindControl("chkSelect") as CheckBox;
if (chkSelect != null)
{
int productID = Convert.ToInt32(gvProducts.DataKeys[gvr.RowIndex]["ProductID"]);
if (chkSelect.Checked && !this.ProductIDs.Contains(productID))
{
this.ProductIDs.Add(productID);
}
else if (!chkSelect.Checked && this.ProductIDs.Contains(productID))
{
this.ProductIDs.Remove(productID);
}
}
}
}
protected void gvProducts_RowDataBound(object sender, GridViewRowEventArgs e)
{
GridViewRow gvr = e.Row;
if (gvr.RowType == DataControlRowType.DataRow)
{
CheckBox chkSelect = gvr.FindControl("chkSelect") as CheckBox;
if (chkSelect != null)
{
int productID = Convert.ToInt32(gvProducts.DataKeys[gvr.RowIndex]["ProductID"]);
chkSelect.Checked = this.ProductIDs.Contains(productID);
}
}
}
それを行うにはどのように...任意のサンプルコードの背後にあるコード
の下にマークアップ
を与えています,,, –
datakeynamesはテンプレートfeild –
にありますか?gridview.DataKeynames = "ProductID"のマークアップを確認してください。あなたはそれをitemtemplateの隠しフィールドとして格納することができます。それは私たちがソースを見て、それが良い習慣ではないときにidを公開します。 – naveen