|
我使用存储过程进行分页,想用ViewState来保存DataGrid自定义模板列中checkbox跨页的选中值,但没想出来在什么地方保存checkbox的选中值。选择完点“下一页”或“上一页”后,Page_Load都显示的是DataGrid另一页面的数据,还没等我选中checkbox就已经提交了,怎么能取到值呢?(不要说孟子的例子,他用的DataGrid自带的分页,有DataGrid1_PageIndexChanged事件,我这里没有)
下面有几个写好的方法,但不知道在哪里调用SaveCheckedItems()方法,Page_Load里面好象不大行,就是这一点没想出来。。。。
----------------------------------
//获取(创建)保存选中状态的集合
ArrayList CheckedItemCollection
{
get
{
if (ViewState["CheckedItems"] == null)
ViewState["CheckedItems"] = new ArrayList();
return ViewState["CheckedItems"] as ArrayList;
}
}
//加入项
private void AddCheckedItem(int key)
{
ArrayList al = CheckedItemCollection;
if ( ! al.Contains(key))
al.Add(key);
}
//移除项
private void RemoveCheckedItem(int key)
{
ArrayList al = CheckedItemCollection;
if ( al.Contains(key))
al.Remove(key);
}
/* 每次翻页时,需要保存页面勾选状态。
* 操作逻辑:
* 对于选中项,将ID存入 状态集合
* 对于未选中项, 如果此项ID在集合中存在, 则删除。
*/
private void SaveCheckedItems()
{
for(int i = 0 ; i < DataGrid1.Items.Count; i++)
{
CheckBox cb = DataGrid1.Items[i].Cells[0].FindControl("CheckBox1") as CheckBox;
if (cb != null)
{
int key = Convert.ToInt32(DataGrid1.Items[i].Cells[1].Text);
if (cb.Checked)
this.AddCheckedItem(key);
else
this.RemoveCheckedItem(key);
}
}
}
/* 每次DataGrid绑定后,
* 需要通过此方法从 状态集合 中 装载勾选状态。
*/
void LoadCheckedState()
{
ArrayList al = CheckedItemCollection;
for(int i = 0 ; i < DataGrid1.Items.Count; i++)
{
CheckBox cb = DataGrid1.Items[i].Cells[0].FindControl("CheckBox1") as CheckBox;
if (cb != null)
{
int key = Convert.ToInt32(DataGrid1.Items[i].Cells[1].Text);
if ( al.Contains(key) )
cb.Checked = true;
}
}
} |
|