思路:通过一个ArrayList来保持你已经选择的项的ID,当页索引变化时,将触发DataBinding事件,在该事件内调用CollectSelected()方法,来保存所有CheckBox选中的行,去掉那些未选中的行ID。在RowDataBound(),通过SelectedItems中保存的ID来设置是否选中,以回显你的操作。需要注意的是,在你提交的时候,一定要再调用一次CollectSelected(),以最后一次收集当前页的选中情况。
1
protected ArrayList SelectedItems
2
{
3
get
4
{
5
return (ViewState["mySelectedItems"] != null) ? (ArrayList)ViewState["mySelectedItems"] : null;
6
}
7
set
8
{
9
ViewState["mySelectedItems"] = value;
10
}
11
}
12
/// <summary>
13
/// 从当前页收集选中项的情况
14
/// </summary>
15
protected void CollectSelected()
16
{
17
ArrayList selectedItems = null;
18
if (this.SelectedItems == null)
19
selectedItems = new ArrayList();
20
else
21
selectedItems = this.SelectedItems;
22
for (int i = 0; i < this.gvWorks.Rows.Count; i++)
23
{
24
CheckBox cb = (CheckBox)gvWorks.Rows.FindControl("cbChoose");
25
string id = ((Label)gvWorks.Rows.FindControl("lbID")).Text;
26
if (selectedItems.Contains(id) && !cb.Checked)
27
selectedItems.Remove(id);
28
if (!selectedItems.Contains(id) && cb.Checked)
29
selectedItems.Add(id);
30
}
31
SelectedItems = selectedItems;
32
}
33
34
protected void gvWorks_DataBinding(object sender, EventArgs e)
35
{
36
//在每一次重新绑定之前,需要调用CollectSelected方法从当前页收集选中项的情况
37
CollectSelected();
38
}
39
protected void gvWorks_RowDataBound(object sender, GridViewRowEventArgs e)
40
{
41
//这里的处理是为了回显之前选中的情况
42
if (e.Row.RowIndex > -1 && SelectedItems!=null)
43
{
44
DataRowView row = e.Row.DataItem as DataRowView;
45
CheckBox cb = (CheckBox)e.Row.FindControl("cbChoose");
46
Label lbID = (Label)e.Row.FindControl("lbID");
47
if(SelectedItems.Contains(lbID.Text))
48
cb.Checked = true;
49
else
50
cb.Checked = false;
51
}
52
}
53
protected ArrayList SelectedItems2
{3
get4
{5
return (ViewState["mySelectedItems"] != null) ? (ArrayList)ViewState["mySelectedItems"] : null;6
}7
set8
{9
ViewState["mySelectedItems"] = value;10
}11
}12
/// <summary>13
/// 从当前页收集选中项的情况14
/// </summary>15
protected void CollectSelected()16
{17
ArrayList selectedItems = null;18
if (this.SelectedItems == null)19
selectedItems = new ArrayList();20
else21
selectedItems = this.SelectedItems;22
for (int i = 0; i < this.gvWorks.Rows.Count; i++)23
{24
CheckBox cb = (CheckBox)gvWorks.Rows.FindControl("cbChoose");25
string id = ((Label)gvWorks.Rows.FindControl("lbID")).Text;26
if (selectedItems.Contains(id) && !cb.Checked)27
selectedItems.Remove(id);28
if (!selectedItems.Contains(id) && cb.Checked)29
selectedItems.Add(id);30
}31
SelectedItems = selectedItems;32
}33
34
protected void gvWorks_DataBinding(object sender, EventArgs e)35
{36
//在每一次重新绑定之前,需要调用CollectSelected方法从当前页收集选中项的情况37
CollectSelected();38
}39
protected void gvWorks_RowDataBound(object sender, GridViewRowEventArgs e)40
{41
//这里的处理是为了回显之前选中的情况42
if (e.Row.RowIndex > -1 && SelectedItems!=null)43
{44
DataRowView row = e.Row.DataItem as DataRowView;45
CheckBox cb = (CheckBox)e.Row.FindControl("cbChoose");46
Label lbID = (Label)e.Row.FindControl("lbID");47
if(SelectedItems.Contains(lbID.Text))48
cb.Checked = true;49
else50
cb.Checked = false;51
}52
}53


浙公网安备 33010602011771号