这个问题通常是因为数据绑定后GridView的ViewState被清除所引起的。为了解决这个问题,我们需要在Page_Load事件中重新绑定数据并重新设置GridView的ViewState。
下面是示例代码:
protected void Page_Load(object sender, EventArgs e) { if(!IsPostBack) { BindGridView(); } else { RestoreGridView(); } }
private void BindGridView() { //绑定数据到GridView GridView1.DataSource = GetData(); GridView1.DataBind(); //设置DataKey GridView1.DataKeyNames = new string[] {"ID"}; //保存GridView的ViewState SaveGridView(); }
private void SaveGridView() { System.IO.StringWriter sw = new System.IO.StringWriter(); System.Web.UI.HtmlTextWriter htw = new System.Web.UI.HtmlTextWriter(sw); GridView1.RenderControl(htw); ViewState["GridView1"] = sw.ToString(); }
private void RestoreGridView() { //恢复GridView的ViewState string gridViewString = (string)ViewState["GridView1"]; System.IO.StringReader sr = new System.IO.StringReader(gridViewString); System.Web.UI.HtmlTextReader htr = new System.Web.UI.HtmlTextReader(sr); GridView1.RenderControl(htr); }
通过上面的代码,我们可以在重新绑定数据后恢复GridView的行选择状态。