ASP.NET:GridViewページをめくるとテンプレート列内のRadioButtonList選択状態が保存されます
最近使用NETがアイテムを作成すると、GridViewがページをめくると、テンプレート列内のRadioButtonListで選択したアイテムは保存できません.ネットで解決策を探してみると、テンプレート列内がCheckboxであることが多く、RadioButtonListは少ない.実はこの2つの原理は同じで、この問題を解決するには、保存状態と復元状態の2つの方法を書き、GridViewのページめくりイベント(GridView 1_PageIndexChanging)でそれぞれこの2つの方法を呼び出すことが核心です.コードは次のとおりです.
// RadioButtonList
protected void Save()
{
Hashtable ht = new Hashtable(); // Hashtable, RadioButtonList 。
for (int i = 0; i < this.GridView1.Rows.Count; i++) // GridView
{
int id = Convert.ToInt32(this.GridView1.DataKeys[i].Value.ToString()); // GridView id
RadioButtonList rbtn = (RadioButtonList)this.GridView1.Rows[i].FindControl("rbtnMatter");
int matter = Convert.ToInt32(rbtn.SelectedValue);
if (ViewState["ht"] != null)
{
ht = (Hashtable)ViewState["ht"];
if (ht.Contains(id))
{
ht.Remove(id);
}
}
ht.Add(id, matter);
ViewState["ht"] = ht;
}
}
// RadioButtonList
protected void Revert()
{
Hashtable ht = (Hashtable)ViewState["ht"];
for (int i = 0; i < this.GridView1.Rows.Count; i++)
{
int id = Convert.ToInt32(this.GridView1.DataKeys[i].Value.ToString());
if (ht.Contains(id))
{
int matter = (int)ht[id];
RadioButtonList rbtn = (RadioButtonList)this.GridView1.Rows[i].FindControl("rbtnMatter");
rbtn.SelectedIndex = matter;
}
}
}
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
Save();
this.GridView1.PageIndex = e.NewPageIndex;
GridViewBind();
Revert();
}