2013-12-17 2 views
0

Я новичок в jqGrid, я хочу сгенерировать groupHeaders динамическим способом, но он действительно сработал. Оператор getValues ​​('department') представляет собой анализ отдела, который вводит пользователь, например 'a, b, c'. Код в тексте:jqGrid groupHeaders проблемы

function search() { 
     var startDate = $('#startDate').val(); 
     var endDate = $('#endDate').val(); 
     var department = getValues('department'); 

     var colName = new Array(); 
     var colAttr = new Array(); 
     colName[0] = "日期"; 
     colAttr[0] = "{name:'" + colName[0] + "',sortable:false,align:'center'}" 

     var length = getLength(department); 
     for (var i = 1; i < length + 1; i++) { 
      colName[2 * i - 1] = "咨询" + i; 
      colName[2 * i] = "投诉" + i; 
      colAttr[2 * i - 1] = "{name:'" + colName[2 * i - 1] + "'index:'" + i + "',sortable:false,align:'center'}"; 
      colAttr[2 * i] = "{name:'" + colName[2 * i] + "',sortable:false,align:'center'}"; 
     } 
     var header = mySplitter(department); 

     var urlStr = '<%=jspName%>?startDate=' + startDate + '&endDate=' + endDate + '&action=query&department=' + department; 
     urlStr = encodeURI(urlStr); 
     jQuery("#dataGrid").clearGridData(); 
     jQuery("#dataGrid").GridUnload(); 
     jQuery("#dataGrid").jqGrid({ 
      url: urlStr, 
      datatype: "json", 
      colNames: colName, 
      colModel: colAttr, 
      height: 450, 
      rowNum: 20000,     //默认每页记录数 
      rowList: [10, 20, 30],   //可选择的每页记录数 
      pager: '#dataPager', 
      shrinkToFit: true, 
      hidegrid: false, 
      emptyrecords: "暂无数据", 
      viewrecords: true, 
      loadonce: true, //自动翻页 
      caption: "<%=title%>" 
     }); 
     jQuery("#dataGrid").jqGrid('navGrid', '#dataPager', {edit: false, add: false, del: false, autowidth: true}); 
     $("#dataGrid").setGridWidth($(window).width() * 0.90); 
     jQuery("#dataGrid").jqGrid('setGroupHeaders', { 
      useColSpanStyle: true, 
      groupHeaders: header 
     }); 
    } 

function mySplitter(str) { 
     if (str === null) { 
      return null; 
     } 
     var temp; 
     temp = str.split(","); 
     var result = new Array(); 
     for (var i = 0; i < temp.length - 1; i++) { 
      result[i] = "{startColumnName: '" + (i + 1) + "', numberOfColumns: 2, titleText: '" + temp[i] + "'}"; 
     } 
     return result; 
    } 

    function getLength(str) { 
     if (str === null) { 
      return 0; 
     } 
     var temp = str.split(","); 
     return temp.length - 1; 

    } 

Код не генерировал groupHeaders. Кто-нибудь может мне помочь?

ответ

0

Элементы colModel массива должны быть объекты, обладающие свойствами name и т.д. Вместо того, чтобы вы установили строки в качестве элементов colAttr.

В JavaScript вы никогда не должны использовать new Array() вместо того, что вы должны использовать []:

var colName = ["日期"], 
    colAttr = [{name: colName[0], sortable:false, align: 'center'}], 
    i; 

Если вам нужно добавить массив новый элемент, лучше использовать push метод.

Кроме того, вы должны

  • удалить index свойство всех colModel элементов. Вы используете loadonce: true. Таким образом, вы сможете использовать локальную сортировку после удаления index свойств.
  • Если вам нужно определить некоторые свойства для всех столбцов, лучше удалить дубликаты из colModel элементов (удалите sortable:false,align:'center') и добавьте опцию jqGrid cmTemplate с настройками. Например, вы можете использовать cmTemplate: { sortable: false, align: "center" }.
  • Я рекомендую вам добавить gridview: true и autoencode: true вариантов. Кроме того, вы должны использовать height: "auto" вместо height: 450.
  • Я рекомендую использовать postData с функциями в качестве свойств вместо здания urlStr вручную (см. the answer). В случае варианты могут быть
url: '<%=jspName%>', 
postData: { 
    startDate: function() { return $("#startDate").val(); }, 
    endDate: function() { return $("#endDate").val(); }, 
    action: "query", 
    department: function() { return getValues('department'); } 
} 
+0

Спасибо за вас ответы! Я попробую снова. – user2926672

Смежные вопросы