2009-01-14 112 views
1

我想要立即更新一個狀態行,指示跨asp.net gridview的所有頁面中選中的複選框的數量。現在我只能計算在當前gridview頁面上檢查的複選框的數量。如何使用jquery來檢查GridView的所有頁面上的複選框?

這裏是我的代碼:

$(document).ready(initAll); 

function initAll(){ 
    countChecked(); 
    $(".activeBoxes").click(countChecked); 
} 

function countChecked() { 

     var n = $(".activeBoxes input:checked").length; 
     $("#checkboxStatus").text(n + (n == 1 ? " vehicle is" : " vehicles are") + " selected on this page. "); 
     if(n == 0){ 
      $(".activateButton").hide(); 
      $("#checkboxStatus").hide(); 

     }else{ 
     $("#checkboxStatus").show(); 
     $(".activateButton").show(); 
     } 

} 
+0

據我所知,只有頁面上可見的元素實際上在標記中,因此是DOM,因此您必須嚴重解析視圖狀態 – annakata 2009-01-14 19:40:15

+0

我有從列表中刪除未選中的框的代碼。我也可以包含該代碼,但我的問題是關於在gridview的所有頁面上統計複選框,並立即更新狀態而無需重新加載頁面。 – Bryan 2009-01-14 23:46:24

回答

0

保持一個隱藏的文本字段您的網頁上,每次你選中一個框,調用一個javascript方法,將複選框的「id」寫入隱藏字段。每次您回發您的頁面時,都會將隱藏字段的值序列化到所需對象結構中的會話(無論是對象,散列表,數組等)。

在渲染頁面時,每個複選框都可以檢查會話對象結構(您之前創建的),並確定複選框的狀態是否最後一次被選中。

您可以使用JQuery遍歷頁面上的所有複選框,並在複選框被選中時遞增計數器。

0

您可以跟蹤視圖狀態(或類似的東西)頁面上改變總的選擇。我做了類似的跟蹤數組中選定的行ID。就我而言,當他們返回頁面時,我不得不重新檢查這些項目。此外,如果您允許排序,則選擇可能會跨頁面移動。

編輯:很抱歉,這實際上不是jQuery的問題,但也許這將有助於...

+0

感謝史蒂夫的努力?你解決了相關的問題。 – Bryan 2009-01-20 21:29:12

0

我使用的視圖狀態跟蹤的所有檢查所有網頁上的項目,並重新檢查他們在回到頁。

我將不得不添加我的viewstate值到頁面總數,並以某種方式減去重疊的總數。由於我的jquery不包含id,這將是棘手的。

protected ArrayList savedIds; 
if (ViewState["SavedIds"] == null) savedIds = new ArrayList(); 
     else savedIds = (ArrayList)ViewState["SavedIds"]; 

List<int> activateList = new List<int>(); 

     foreach (GridViewRow tt in GridView2.Rows) 
     { 
      CheckBox cb = (CheckBox)tt.FindControl("ActivateItem"); 
      HiddenField id = (HiddenField)tt.FindControl("IdField"); 
      if (cb.Checked) 
      { 
       int tempId = 0; 
       string tempId2 = id.Value.ToString(); 
       int.TryParse(tempId2, out tempId); 
       activateList.Add(tempId); 
      } 

     } 
     foreach (int activateId in activateList) 
     { 
      if (!savedIds.Contains(activateId.ToString())) savedIds.Add(activateId.ToString()); 
     } 
     ViewState["SavedIds"] = savedIds; 
+0

你不能使用會話嗎?儘量避免使用ViewState,您是否看到它添加到HTML中的代碼,這將需要更多時間在客戶端瀏覽器中加載頁面! – balexandre 2009-01-14 22:21:05

0

你缺少的是刪除ID。當檢查行並且未檢查tempid時,確保它不在saveids中。

相關問題