心语飘絮
别让今天的懒惰成为明天的遗憾!!!
如果你需要在一个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
posted on 2007-04-19 12:42  jeffery0101  阅读(900)  评论(0编辑  收藏  举报