现在的位置: 首页 > 综合 > 正文

GridView 如何在翻页时保持CheckBox的选择

2014年04月28日 ⁄ 综合 ⁄ 共 1547字 ⁄ 字号 评论关闭
GridView 如何在翻页时保持CheckBox的选择 出处: 不详,网络资源 如果你需要在一个GridView中加一个CheckBox,以选择某行数据,然后进入下一页继续选择,而返回上一页时仍旧能够显示你已经选择了的数据行,那么,这里将提供一种方式给你。因为分页时,页面发生变化时,是要postback回服务器的,这样,虽然你做了选择,但是未更新到服务器,所以,不做处理的话是保存不住已经选择的项的。 思路:通过一个ArrayList来保持你已经选择的项的ID,当页索引变化时,将触发DataBinding事件,在该事件内调用CollectSelected()方法,来保存所有CheckBox选中的行,去掉那些未选中的行ID。在RowDataBound(),通过SelectedItems中保存的ID来设置是否选中,以回显你的操作。需要注意的是,在你提交的时候,一定要再调用一次CollectSelected(),以最后一次收集当前页的选中情况。 protected ArrayList SelectedItems { get { return (ViewState["mySelectedItems"] != null) ? (ArrayList)ViewState["mySelectedItems"] : null; } set { ViewState["mySelectedItems"] = value; } } ///

/// 从当前页收集选中项的情况 /// protected void CollectSelected() { ArrayList selectedItems = null; if (this.SelectedItems == null) selectedItems = new ArrayList(); else selectedItems = this.SelectedItems; for (int i = 0; i < this.gvWorks.Rows.Count; i++) { CheckBox cb = (CheckBox)gvWorks.Rows.FindControl("cbChoose"); string id = ((Label)gvWorks.Rows.FindControl("lbID")).Text; if (selectedItems.Contains(id) && !cb.Checked) selectedItems.Remove(id); if (!selectedItems.Contains(id) && cb.Checked) selectedItems.Add(id); } SelectedItems = selectedItems; } protected void gvWorks_DataBinding(object sender, EventArgs e) { //在每一次重新绑定之前,需要调用CollectSelected方法从当前页收集选中项的情况 CollectSelected(); } protected void gvWorks_RowDataBound(object sender, GridViewRowEventArgs e) { //这里的处理是为了回显之前选中的情况 if (e.Row.RowIndex > -1 && SelectedItems!=null) { DataRowView row = e.Row.DataItem as DataRowView; CheckBox cb = (CheckBox)e.Row.FindControl("cbChoose"); Label lbID = (Label)e.Row.FindControl("lbID"); if(SelectedItems.Contains(lbID.Text)) cb.Checked = true; else cb.Checked = false; } }

抱歉!评论已关闭.