【问题标题】:ASP.NET MVC and jqGrid: Persisting MultiselectionASP.NET MVC 和 jqGrid:持久多选
【发布时间】:2011-01-14 21:07:34
【问题描述】:

我在一个带有multiselect:true 选项的 ASP.NET MVC 视图中有一个 jqGrid。网格中显示了 200 多条记录,因此我启用了分页。这很好用,但是当我从一个页面导航到另一个页面时,导航时选择会丢失。

有没有一种好的、干净的方法来持久化选择,以便在分页时保持它们?

【问题讨论】:

    标签: asp.net-mvc jqgrid


    【解决方案1】:

    user279248(我知道这是一篇旧帖子,但这是一个好问题) - 所有行 id 都存储在 pages 数组的 selRows 数组中,所以只需遍历它们,即

    for (j=0;j<pages.length;j++) { 
      var selRow = pages[j];
      for (k=0;k<selRow.length;k++) {
       alert('RowID:'+selRow[k]);
      }
    }
    

    希望这对某人有所帮助。

    Dave - 两年后您的解决方案依然强大!感谢您的代码。我唯一的调整是将代码提升为函数 - 适用于同一页面上的多个网格。

    function maint_chkbxs_oSR(obj_ref, rowid, status, pages) {
    
            var pageId = $(obj_ref).jqGrid('getGridParam','page');
            var selRows = [];
            if (status) {
                //item selected, add index to array
                if (pages[pageId] == null) {
                    pages[pageId] = [];
                }
                selRows = pages[pageId];
    
                //if (selRows.indexOf(rowid) == -1)
                if ($.inArray(""+rowid,selRows) == -1)
                { selRows.push(rowid); }
            }
            else {
                //item deselected, remove from array
                selRows = pages[pageId];
                var index = $.inArray(""+rowid,selRows);
                if (index != -1) {
                    pages[pageId].splice(index, 1);
                }
            }   
        }
    
        function maint_ckbxs_lC(obj_ref, pages) {
    
            if (pages[$(obj_ref).jqGrid('getGridParam','page')] != null) {
                var selRows = pages[$(obj_ref).jqGrid('getGridParam','page')];
                var i;
                var limit = selRows.length;
                for (i = 0; i < limit; i++) {
                    //$('#grid_bucket').setSelection(selRows[i], true);
                    $(obj_ref).jqGrid('setSelection',selRows[i],true);
                }
            }   
        }
    

    您只需要记住为每个网格创建一个专用的页面数组。

    【讨论】:

      【解决方案2】:

      使用一些 javascript 技巧对其进行管理:

          var pages = [];
          onSelectRow: function(rowid, status) {
                          var pageId = $('#grdApplications').getGridParam('page');
                          var selRows = [];
                          if (status) {
                              //item selected, add index to array
                              if (pages[pageId] == null) {
                                  pages[pageId] = [];
                              }
                              selRows = pages[pageId];
      
                              if (selRows.indexOf(rowid) == -1)
                              { selRows.push(rowid); }
                          }
                          else {
                              //item deselected, remove from array
                              selRows = pages[pageId];
                              var index = selRows.indexOf(rowid)
                              if (index != -1) {
                                  pages[pageId].splice(index, 1);
                              }
                          }
                      },
      
      loadComplete: function() {
                      if (pages[$('#grdApplications').getGridParam('page')] != null) {
                          var selRows = pages[$('#grdApplications').getGridParam('page')];
                          var i;
                          var limit = selRows.length;
                          for (i = 0; i < limit; i++) {
                              $('#grdApplications').setSelection(selRows[i], true);
                          }
                      }
                  },
      

      【讨论】:

      • 谢谢戴夫,我一直在谷歌上搜索它。但是如何获取所有检查的行数据,我的意思是当我尝试使用 jqGrid('getGridParam','selarrrow') 获取数据时,我只是从显示的页面中获取行 ID。请帮帮我。对不起我的英语不好。
      猜你喜欢
      • 2011-08-18
      • 2012-01-15
      • 1970-01-01
      • 1970-01-01
      • 2016-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多