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; } }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 }