问题描述
我使用存储过程进行分页,想用ViewState来保存DataGrid自定义模板列中checkbox跨页的选中值,但没想出来在什么地方保存checkbox的选中值。选择完点“下一页”或“上一页”后,Page_Load都显示的是DataGrid另一页面的数据,还没等我选中checkbox就已经提交了,怎么能取到值呢?(不要说孟子的例子,他用的DataGrid自带的分页,有DataGrid1_PageIndexChanged事件,我这里没有)下面有几个写好的方法,但不知道在哪里调用SaveCheckedItems()方法,Page_Load里面好象不大行,就是这一点没想出来。。。。----------------------------------//获取(创建)保存选中状态的集合ArrayListCheckedItemCollection{get{if(ViewState["CheckedItems"]==null)ViewState["CheckedItems"]=newArrayList();returnViewState["CheckedItems"]asArrayList;}}//加入项privatevoidAddCheckedItem(intkey){ArrayListal=CheckedItemCollection;if(!al.Contains(key))al.Add(key);}//移除项privatevoidRemoveCheckedItem(intkey){ArrayListal=CheckedItemCollection;if(al.Contains(key))al.Remove(key);}/*每次翻页时,需要保存页面勾选状态。*操作逻辑:*对于选中项,将ID存入状态集合*对于未选中项,如果此项ID在集合中存在,则删除。*/privatevoidSaveCheckedItems(){for(inti=0;i<DataGrid1.Items.Count;i++){CheckBoxcb=DataGrid1.Items[i].Cells[0].FindControl("CheckBox1")asCheckBox;if(cb!=null){intkey=Convert.ToInt32(DataGrid1.Items[i].Cells[1].Text);if(cb.Checked)this.AddCheckedItem(key);elsethis.RemoveCheckedItem(key);}}}/*每次DataGrid绑定后,*需要通过此方法从状态集合中装载勾选状态。*/voidLoadCheckedState(){ArrayListal=CheckedItemCollection;for(inti=0;i<DataGrid1.Items.Count;i++){CheckBoxcb=DataGrid1.Items[i].Cells[0].FindControl("CheckBox1")asCheckBox;if(cb!=null){intkey=Convert.ToInt32(DataGrid1.Items[i].Cells[1].Text);if(al.Contains(key))cb.Checked=true;}}}
解决方案
解决方案二:
有没有人知道???难道一定要用DataGrid自带的分页(DataGrid1_PageIndexChanged)。
解决方案三:
看来大家都不会。
解决方案四:
overrideOnPreRender(...)//把LoadCheckedState放在这里边试试。{LoadCheckedState();}
解决方案五:
overrideOnLoad(...)//没绑定前记住所有checked的keys.{SaveCheckedItems();base.OnLoad(...);}overrideOnPreRender(...)//把LoadCheckedState放在这里边试试。绑定后,还原check.{LoadCheckedState();base.OnPreRender(...);}
解决方案六:
OnLoad(...)、OnPreRender(...)方法的返回类型是什么???
解决方案七:
mark
解决方案八:
用session操作完了,再清除session