2016-05-25 102 views
0

我正在根据特定条件设置行颜色。我有几个网格有几行。此代码是severley减慢页面加速JQGrid突出显示GridComplete上的行

function setRowColorSetgrid() { 
     var rows = $("#Setgrid").getDataIDs(); 
     for (var i = 0; i < rows.length; i++) { 
      var status = $("#Setgrid").getCell(rows[i], "value"); 
      if (status == "False") { 
       $("#Setgrid").jqGrid('setRowData', rows[i], false, { 
        color: 'white', 
        weightfont: 'bold', 
        background: 'red' 
       }); 
      } 
     } 
    } 

//Have a function to set color for each grid I am loading 
    function setRowColorSomeOthergrid() { 
     var rows = $("#SomeOthergrid").getDataIDs(); 
     for (var i = 0; i < rows.length; i++) { 
      var status = $("#SomeOthergrid").getCell(rows[i], "value"); 
      if (status == "False") { 
       $("#Somethergrid").jqGrid('setRowData', rows[i], false, { 
        color: 'white', 
        weightfont: 'bold', 
        background: 'red' 
       }); 
      } 
     } 
    } 

的加载在网格中完成的jqGrid的我调用这个

gridComplete: function(){setRowColorSetgrid();} 
    //Have a grid creation funcrtion for all the grids I am loading 
     gridComplete: function(){setRowColorSomeOthergrid();} 

这使页面真正的大,我想是因为我在寻找一个状态每个网格中的每一行“假”其采取永远载入

我怎样才能把我的javascript代码到不具有setRowColor ...功能每个网格

我还可以使用其他什么逻辑来设置基于字段值的行颜色,该字段值的性能会更好?

这是我的jqgrid。类永远不会被应用,但是功能确实致力于通过行

function INIFiltersgrid() { 
      var data = [ 
       ['INI Exception', 'False', 'INI Path: Not Found'], 
      ]; 
      $("#INIFiltersgrid").jqGrid({ 
       datatype: "local", 
       height: 500, 
       width: 900, 
       colNames: ['Name', 'Passed', 'Value'], 
       colModel: [{ 
        name: 'name', 
        index: 'name', 
        width: 90 
       }, { 
        name: 'value', 
        index: 'value', 
        width: 60 
       }, { 
        name: 'passed', 
        index: 'passed', 
        width: 240, 
        height: 400 
       }], 
       gridview: true, 
       rowattr: function (rd) { 
    if (rd.value === "False") { // verify that the testing is correct in your case 
     return {"class": "myAltRowClass"}; 
    } 
       caption: "INIFilters" 
      }); 
      var names = ["name", "value", "passed"]; 
      var mydata = []; 
      for (var i = 0; i < data.length; i++) { 
       mydata[i] = {}; 
       for (var j = 0; j < data[i].length; j++) { 
        mydata[i][names[j]] = data[i][j]; 
       } 
      } 
      for (var i = 0; i <= mydata.length; i++) { 
       $("#INIFiltersgrid").jqGrid('addRowData', i + 1, mydata[i]); 
      } 
      $("#INIFiltersgrid").jqGrid('setGridParam', { 
       ondblClickRow: function(rowid, iRow, iCol, e) { 
        alert('double clicked'); 
       } 
      }); 
     } 

回答

1

迭代您应该使用rowattr回调函数,允许添加类或设置在一些行的某些属性(如style="...")。有关相应的代码示例,请参见the old answer。另外使用gridview: true选项很重要(请参阅[答案])。如果您使用free jqGrid,那么gridview: true选项已经是默认值。我不建议你使用gridComplete。回调loadComplete在大多数情况下更好。有关更详细的说明,请参见the answer

已更新:永远不要在循环中使用addRowData来填充网格。这是最糟糕的方式,我知道填补网格(最慢)。如果您需要填写网格mydata,那么您应该只添加data: mydata选项到网格。此外,如果您使用我在答案中推荐的jqGrid的免费jqGrid分支,那么即使您使用addRowDatarowattr仍将应用。如果您使用旧的jqGrid,则将添加addRowData的行,将添加,而不应用应用rowattr

+0

rowattr命中该功能,但无论我做什么都不适用样式 – nlstack01

+0

@ nlstack01:您应该发布您使用的代码。你试过了什么?知道哪个jqGrid版本以及您使用哪个分支可能很重要。 – Oleg

+0

我添加了我的jqgrid实现 – nlstack01