如何获取所有jqgrid的ID,包括分页的ID?

4

我是 JQuery 的新手。

我正在尝试使用这里列出的函数。

mya=$("#list").getDataIDs(); // Get All IDs只会列出当前视图中的 ID。然而,我的网格是分页的。我该如何获取所有的 ID?

以下是我的代码:

$(document).ready(function () {

    jQuery("#customer_list").jqGrid({
      url:'jq_customer_list',
      datatype: "json",
      colNames:['Col1','Col2','Col3'],
      colModel:[
{name:'Col1',index:'Col1', width:100},
{name:'Col2',index:'Col2', width:80},
{name:'Col3',index:'Col3', width:75},
     ],
     rowNum:20,
     rowList:[5,10,20],
     mtype:"GET",
     rownumber:true,
     rownumWidth:40,
     pager: $("#customer_list_pager"),
     viewrecords: true,
     gridview: true,
     caption:"My Data",
     height: '50%',
     pagination:true

    }).navGrid('#customer_list_pager', { search:true, del: false, add: false, edit: false,searchtext:"Search" },
               {}, // default settings for edit
               {}, // default settings for add
               {}, // delete
               {closeOnEscape: true, multipleSearch: true, 
                     closeAfterSearch: true }, // search options
               {}
             ).navButtonAdd('#customer_list_pager',{
                 caption:"Export to Excel", 
                 buttonicon:"ui-icon-save", 
                 onClickButton: function(){ 
                   exportExcel($(this));
                 }, 
                 position:"last"
             });

    function exportExcel($id){
        alert('excelExport');
          var keys=[], ii=0, rows="";
          var ids=$id.getRowData();  // Get All IDs
          var row=$id.getRowData(ids[0]);     // Get First row to get the labels
          for (var k in row) {
            keys[ii++]=k;    // capture col names
            rows=rows+k+"\t";     // output each Column as tab delimited
          }
          rows=rows+"\n";   // Output header with end of line
          for(i=0;i<ids.length;i++) {
            row=$id.getRowData(ids[i]); // get each row
            for(j=0;j<keys.length;j++) rows=rows+row[keys[j]]+"\t"; // output each Row as tab delimited
            rows=rows+"\n";  // output each row with end of line
          }
          rows=rows+"\n";  // end of line at the end
          var form = "<form name='csvexportform' action='excelExport' method='post'>";
          form = form + "<input type='hidden' name='csvBuffer' value='"+rows+"'>";
          form = form + "</form><script>document.csvexportform.submit();</sc"+"ript>";
          OpenWindow=window.open('', '');
          OpenWindow.document.write(form);
          OpenWindow.document.close();
        }

    $("#customer_list").filterToolbar({autosearch:true });

    });
2个回答

6
您使用了 datatype:"json",但没有使用loadonce:true。因此,服务器负责排序和分页。所以我建议仅在服务器代码中实现CSV或XLSX的导出。 jqGrid没有关于完整数据集的数据id列表或其他任何信息。您只能将 window.location 设置到新的url上。url的服务器部分将生成CSV或XLSX,将其返回给HTTP正文,并设置其他HTTP头,如Content-Type为(对于XLSX为"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",对于XLS为"application/vnd.ms-excel",对于CSV为"text/csv"),并将"content-disposition"设置为"attachment; filename=yourfilename.xslx"(文件扩展名可能不同)。这样,Web浏览器会将数据保存在相应名称的文件中,并使用相应的应用程序(例如Excel.exe)打开该文件。

我在这个答案中迷失了。我有一个带有一些过滤器和排序设置的jqgrid,并且我想在页面上某个地方放置一个按钮,以便将当前活动的过滤器与Excel标志一起发送到服务器,以便我的asp.net mvc代码(获取jqgridrequest和该标志)可以知道要发送回一个文件。上面的内容看起来接近我想要的,但是我在window.location处迷失了。 - Randy Magruder
@RandyMagruder:解决您的问题有许多方法,但答案取决于您所做的事情、使用的jqGrid版本(可以使用哪个版本)以及从哪个jqGrid来源获取(free jqGrid、商业版Guriddo jqGrid JS或旧版jqGrid <=4.7)。如果您使用本地过滤,则可以通过.jqGrid("getGridParam", "postData").filters获得它。或者,您可以在应用过滤器后获取所有行的ID。 - Oleg
我正在使用随Lib.Aspnet.Core.Mvc.Jqgrid.Core Nuget包提供的免费版本,用于Asp.net MVC Core。如果您指的是它加载所有数据并在客户端进行过滤,则我不使用本地过滤。每个排序、过滤和页面都作为请求发送回服务器,然后调用支持分页的Web API服务来获取数据。我正在尝试弄清楚postdata如何被处理成与http post一起发送的表单。它只是一个JSON Body与POST一起发送吗? - Randy Magruder

1

正如Oleg所说,没有内置的方法可以返回未在网格中显示的所有网格ID。

如果您真的需要网格中所有ID的列表,我建议创建一个自定义Web方法来生成它们。然后,不要使用网格,而是直接使用其中一个jQuery AJAX函数(如jQuery.get())调用此方法。由于在后端已经使用查询生成了网格数据,因此只需调整该查询以返回ID列表-或必要时的ID和关联数据。

但是如果您真的想实现CSV / Excel输出,则最好创建一个服务器端方法来执行此操作,因为这样可以通过正确设置HTTP标头,允许浏览器打开外部应用程序文件等等,从而提供更好的用户体验。

这有帮助吗?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接