2011-08-15 96 views
0

我想在插入行後使用jqgrid添加條件格式。然而似乎沒有任何事情發生。我在過去使用afterInsertRow並且工作正常。有什麼建議麼?jqgrid條件格式。

jQuery("#gridDevicePlan").jqGrid 
    ({ 
     url:'/dashboard/summarydeviceplans', 
     datatype: "json", 
     colNames:['Temporal','Short Name','Customer', 'Start', 'End', 'Duration', 'Device Count'], 
     colModel:[ {name:'Temporal',index:'Temporal'}, 
        {name:'ShortName',index:'ShortName'}, 
        {name:'Customer',index:'Customer'}, 
        {name:'DateStart',index:'DateStart',formatter:'date', formatoptions:{srcformat:'Y-m-d H:i:s', newformat:'m/d/Y H:i'}}, 
        {name:'DateStop',index:'DateStop',formatter:'date', formatoptions:{srcformat:'Y-m-d H:i:s', newformat:'m/d/Y H:i'}}, 
        {name:'Duration',index:'Duration'}, 
        {name:'DeviceCount',index:'DeviceCount'} 
        ], 
     //multiselect: true, 
     rowNum:10, 
     rowList:[10,50,100,300], 
     //autowidth: true, 
     autowidth: true, 
     height: 'auto', 
     pager: '#pagerDevicePlan', 
     sortname: 'ShortName,Customer,DateStart', 
     mtype: "POST", 
     editurl:'/deviceplan/abort', 
     postData:{'deviceIDs[]':$('#device').val(), 
        'timezone':<?="'".$this->criteria['timezone']."'"?>, 
        'gmtStartDate':<?="'".$this->criteria['gmtStartDate']."'"?>, 
        'gmtStopDate':<?="'".$this->criteria['gmtStopDate']."'"?>   
       }, 
     viewrecords: true, 
     sortorder: "asc", 
     grouping: true, 
     caption:false, 
     afterInsertRow: function(rowid, aData) { //set condiditonal formatting 
      alert(aData.Temporal); 
      if(aData.Temporal != 'Current'){ 
      $("#"+rowid).addClass("ui-state-error"); 
      } 
     } 
    }); 
    jQuery("#gridDevicePlan").jqGrid('navGrid','#pagerDevicePlan',{edit:false,add:false,del:false}); 
+0

從不介意,採取分組,它的工作原理。 –

回答

4

我建議你從不使用afterInsertRow。而不是你應該總是使用gridview: true參數,這增加了jqGrid的性能,沒有任何缺點。如果使用gridview: true,則網格體的填充將首先被構造爲表示相應HTML片段的字符串,然後將該正文作爲一個操作放置在頁面上。您不能將gridview: trueafterInsertRow一起使用。如果使用afterInsertRow,則網格的行將按順序放置在頁面上,然後在每次添加行後調用afterInsertRow。放置頁面的任何元素都要求網頁瀏覽器需要重新計算頁面上所有元素的所有位置。這使網格的填充變得非常緩慢。

你應該做的,是要枚舉loadComplete中的網格行,並向網格的某些行添加「ui-state-error」類。順便說一下,呼叫$("#"+rowid).addClass("ui-state-error");在循環中也是無效的。 <table> DOM元素(jQuery("#gridDevicePlan")[0]this裏面的loadComplete)具有rows屬性,這對於列枚舉非常有效。它必須通過rowid找到表格/網格行,您可以使用rows的另一個DOM方法namedItem。它更有效地發現網格中的行。

您會發現主要問題的解決方案here。即使網格有相對較多的行,相應的demo工作也很快。