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();
}