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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章