【问题标题】:How do I count checked checkboxes across all pages of a gridview using jquery?如何使用jquery计算gridview所有页面上的选中复选框?
【发布时间】:2009-01-14 19:08:30
【问题描述】:

我想立即更新一个状态行,指示在 asp.net gridview 的所有页面中选中的复选框的数量。现在我只能计算在当前 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();
      }

}

【问题讨论】:

  • 据我所知,只有页面上可见的元素实际上在标记中,因此在 DOM 中,因此您必须大量解析视图状态
  • 我有从列表中删除未选中框的代码。我也可以包含该代码,但我的问题是关于计算网格视图所有页面中的复选框并立即更新状态而无需重新加载页面。

标签: asp.net jquery gridview checkbox


【解决方案1】:

在您的页面上保留一个隐藏的文本字段,每次选中一个框时,调用一个 javascript 方法,该方法会将复选框的“id”写入隐藏字段。每次回发页面时,将隐藏字段的值序列化到所需对象结构中的会话(可以是对象、哈希表、数组等)。

在呈现页面时,每个复选框都可以检查会话对象结构(您之前创建的)并确定复选框的状态是否最后被选中。

您可以使用 JQuery 循环浏览页面上的所有复选框,如果复选框被选中,则增加一个计数器。

【讨论】:

  • 此解决方案的关键是将页面上已检查项目的数量传递给 jQuery,然后从数据网格中已检查项目的数量中减去该数字。然后将结果与视图状态列表总计相结合。
【解决方案2】:

您可以在页面更改时跟踪视图状态(或类似内容)中的总选择。我做了类似的事情来跟踪数组中选定的行 ID。就我而言,当它们返回页面时,我必须重新检查这些项目。此外,如果您允许排序,则选择可能会跨页移动。

编辑:抱歉,这实际上不是您的 Jquery 问题,但也许它会有所帮助...

【讨论】:

  • 感谢史蒂夫的努力?您解决了相关问题。
【解决方案3】:

您缺少的是删除 ID。检查行且未检查 tempid 时,请确保它不在 saveids 中。

【讨论】:

    【解决方案4】:

    您知道 Google 是您的朋友吗?

    Selecting CheckBoxes Inside GridView Using JQuery

    The WML Video

    如果没有 JQuery,但对于更完美主义的行为(如下图),try this link

    alt text http://www.gridviewguy.com/ArticleImages/GridViewCheckBoxTwistAni.gif

    【讨论】:

      【解决方案5】:

      我正在使用视图状态来跟踪所有页面中的所有检查项目,并在返回页面时重新检查它们。

      我必须将我的视图状态值添加到页面总数中,并以某种方式减去重叠的总数。由于我的 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;
      

      【讨论】:

      • 你不能使用 Sessions 吗?尽量避免 ViewState,你有没有看到它添加到你的 HTML 中的代码,这将花费更多时间在客户端浏览器中加载页面!
      猜你喜欢
      • 2013-01-06
      • 2011-06-15
      • 1970-01-01
      • 2010-10-26
      • 1970-01-01
      • 2015-07-05
      • 1970-01-01
      • 2011-02-20
      • 2020-11-23
      相关资源
      最近更新 更多