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

如果你需要在一个GridView中加一个CheckBox,以选择某行数据,然后进入下一页继续选择,而返回上一页时仍旧能够显示你已经选择了的数据行,那么,这里将提供一种方式给你。因为分页时,页面发生变化时,是要postback回服务器的,这样,虽然你做了选择,但是未更新到服务器,所以,不做处理的话是保存不住已经选择的项的。

思路:通过一个ArrayList来保持你已经选择的项的ID,当页索引变化时,将触发DataBinding事件,在该事件内调用CollectSelected()方法,来保存所有CheckBox选中的行,去掉那些未选中的行ID。在RowDataBound(),通过SelectedItems中保存的ID来设置是否选中,以回显你的操作。需要注意的是,在你提交的时候,一定要再调用一次CollectSelected(),以最后一次收集当前页的选中情况。
 1 None.gif   protected  ArrayList SelectedItems
 2 ExpandedBlockStart.gifContractedBlock.gif     dot.gif {
 3InBlock.gif        get
 4ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
 5InBlock.gif            return (ViewState["mySelectedItems"!= null? (ArrayList)ViewState["mySelectedItems"] : null;
 6ExpandedSubBlockEnd.gif        }

 7InBlock.gif        set
 8ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
 9InBlock.gif            ViewState["mySelectedItems"= value;
10ExpandedSubBlockEnd.gif        }

11ExpandedBlockEnd.gif    }

12 ExpandedBlockStart.gifContractedBlock.gif     /**/ /// <summary>
13InBlock.gif    /// 从当前页收集选中项的情况
14ExpandedBlockEnd.gif    /// </summary>

15 None.gif      protected   void  CollectSelected()
16 ExpandedBlockStart.gifContractedBlock.gif     dot.gif {
17InBlock.gif        ArrayList selectedItems = null;
18InBlock.gif        if (this.SelectedItems == null)
19InBlock.gif            selectedItems = new ArrayList();
20InBlock.gif        else
21InBlock.gif            selectedItems = this.SelectedItems;
22InBlock.gif        for (int i = 0; i < this.gvWorks.Rows.Count; i++)
23ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
24InBlock.gif            CheckBox cb = (CheckBox)gvWorks.Rows.FindControl("cbChoose");
25InBlock.gif            string id = ((Label)gvWorks.Rows.FindControl("lbID")).Text;
26InBlock.gif            if (selectedItems.Contains(id) && !cb.Checked)
27InBlock.gif                selectedItems.Remove(id);
28InBlock.gif            if (!selectedItems.Contains(id) && cb.Checked)
29InBlock.gif               selectedItems.Add(id);
30ExpandedSubBlockEnd.gif       }

31InBlock.gif       SelectedItems = selectedItems;
32ExpandedBlockEnd.gif    }

33 None.gif 
34 None.gif     protected   void  gvWorks_DataBinding( object  sender, EventArgs e)
35 ExpandedBlockStart.gifContractedBlock.gif     dot.gif {
36InBlock.gif       //在每一次重新绑定之前,需要调用CollectSelected方法从当前页收集选中项的情况
37InBlock.gif       CollectSelected();
38ExpandedBlockEnd.gif    }

39 None.gif     protected   void  gvWorks_RowDataBound( object  sender, GridViewRowEventArgs e)
40 ExpandedBlockStart.gifContractedBlock.gif     dot.gif {
41InBlock.gif        //这里的处理是为了回显之前选中的情况
42InBlock.gif       if (e.Row.RowIndex > -1 && SelectedItems!=null)
43ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
44InBlock.gif            DataRowView row = e.Row.DataItem as DataRowView;
45InBlock.gif            CheckBox cb = (CheckBox)e.Row.FindControl("cbChoose");
46InBlock.gif            Label lbID = (Label)e.Row.FindControl("lbID");
47InBlock.gif            if(SelectedItems.Contains(lbID.Text))
48InBlock.gif                cb.Checked = true;
49InBlock.gif            else
50InBlock.gif                cb.Checked = false;
51ExpandedSubBlockEnd.gif        }

52ExpandedBlockEnd.gif    }

53 None.gif

转载于:https://www.cnblogs.com/jeffery19830101/archive/2007/04/19/719479.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值