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

时间:2011-07-05 09:06:24

标签: jquery jqgrid

我是JQuery的新手。

我正在尝试使用列出的here功能。

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 个答案:

答案 0 :(得分:6)

您使用datatype: "json"而没有loadonce:true。因此服务器负责排序和分页。因此,我将在仅限服务器代码中实现CSV或XLSX中的导出。 jqGrid没有关于数据ID的完整列表的信息或有关完整数据集的任何其他信息。您可以做的只是将window.location设置为新网址。 url的服务器部分将生成CSV或XLSX将其返回到HTTP正文中,并将其他HTTP标头设置为Content-Type到(“application / vnd.openxmlformats-officedocument.spreadsheetml.sheet”for XLSX,“application / vnd.ms-excel“用于XLS或”text / csv“用于CSV)和”content-disposition“用于”attachment; filename = youfilname.xslx“(另一个文件扩展名)。如果Web浏览器将数据保存在具有相应名称的文件中,并打开相应应用程序的文件(例如Excel.exe)。

答案 1 :(得分:1)

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

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

但Oleg也是对的,如果你真的想要实现CSV / Excel输出,最好创建一个服务器端方法来做到这一点,因为这样你就可以通过设置HTTP来创建更好的用户体验标题正确,允许浏览器打开文件的外部应用程序等。

这有帮助吗?