GridView实现翻页全选功能
之前也有做过很多对列表信息进行多选的功能,但一般都只涉及到单页勾选。那这此工作需要,自己需要对列表中的信息进行分页全选。下面我就对此进行阐述:
首先我这里用到的列表控件是GridView,

关键步骤:
protected void GridView1_DataBinding(object sender, EventArgs e)
{
//在每一次重新绑定之前,需要调用CollectSelected方法从当前页收集选中项的情况
CollectSelected();
}
/// <summary>
/// 获取或设置选中项的集合
/// </summary>
protected ArrayList SelectedItems
{
get
{
return (ViewState["mySelectedItems"] != null) ? (ArrayList)ViewState["mySelectedItems"] : null;
}
set
{
ViewState["mySelectedItems"] = value;
}
}
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
e.Row.Attributes.Add("onmouseover", "c=this.style.backgroundColor;this.style.backgroundColor='#D6E4F2'");
e.Row.Attributes.Add("onmouseout", "this.style.backgroundColor=c");
//这里的处理是为了回显之前选中的情况
if (e.Row.RowIndex > -1 && this.SelectedItems!=null)
{
DataRowView row = e.Row.DataItem as DataRowView;
CheckBox cb = e.Row.FindControl("CheckedUser") as CheckBox;
if (this.SelectedItems.Contains(row["uname"].ToString()))
cb.Checked = true;
else
cb.Checked = false;
}
}
View Code
1 /// <summary> 2 /// 从当前页收集选中项的情况 3 /// </summary> 4 protected void CollectSelected() 5 { 6 ArrayList selectedItems = null; 7 if (this.SelectedItems == null) 8 selectedItems = new ArrayList(); 9 else 10 selectedItems = this.SelectedItems; 11 12 for (int i = 0; i < this.GridView1.Rows.Count; i++) 13 { 14 string id = this.GridView1.Rows[i].Cells[6].Text.ToString(); 15 Label lblUnit = (Label)GridView1.Rows[i].Cells[4].FindControl("lblUsers"); 16 CheckBox cb = this.GridView1.Rows[i].FindControl("CheckedUser") as CheckBox; 17 if (selectedItems.Contains(id) && !cb.Checked) 18 selectedItems.Remove(id); 19 if (!selectedItems.Contains(id) && cb.Checked) 20 selectedItems.Add(id); 21 } 22 this.SelectedItems = selectedItems; 23 }


浙公网安备 33010602011771号