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

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

思路:通过一个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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wangjiaotou

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值