2010-05-28 126 views
7

我知道它之前已經被問過了,但我不能讓它運行,我無法嘗試。jqGrid根據單元格值在網格中着色整條線

我想爲網格中的一行着色,如果它的值不是1的話 - 我使用自定義格式化程序。格式化程序本身起作用,這不是問題。

我試過多種方式,到目前爲止,我發現在網絡上 - 增加一類,直接添加CSS代碼,使用setRowData,使用setCell ....

這裏是我的例子 - 他們沒有爲我工作(Linux,ff363) - 任何指針將不勝感激。

27.05.2010_00:00:00-27.05.2010_00:00:00是我行ID

<style> 
.state_inactive { 
      background-color: red !important; 
     } 
.state_active { 
    background-color: green !important; 
} 
</style> 

function format_state (cellvalue, options, rowObject) 
{ 
    var elem='#'+options.gid; 
    if (cellvalue != 1) { 

     jQuery('#list2').setRowData(options.rowID,'', 
            {'background-color':'#FF6F6F'}); 

     jQuery('#list2').setRowData('27.05.2010_00:00:00-27.05.2010_00:00:00', 
            '',{'background-color':'#FF6F6F'}); 

     for (var cnt=0;cnt<rowObject.length;cnt=cnt+1) { 
      jQuery(elem).setCell(options.rowId,cnt,'','state_inactive',''); 

      jQuery(elem).setCell('"'+options.rowId+'"',cnt,'','state_inactive'); 

      jQuery(elem).setCell('"'+options.rowId+'"',cnt,'5', 
           {'background-color':'#FF6F6F'},''); 
     } 
    } else { 
     for (var cnt=0;cnt<rowObject.length;cnt=cnt+1) { 
      jQuery(elem).setCell(options.rowId,cnt,'','state_active',''); 
     } 
    } 
    <!-- dont modify, we simply added the class above--> 
    return cellvalue; 
} 

回答

13

在我看來,你的主要問題是你沒有設置'背景色'風格。你應該從該行添加類state_activstate_inactive之前刪除「UI小部件內容」級(從<tr>元素)

jQuery("#"+ options.rowId,jQuery('#list2')).removeClass('ui-widget-content'); 

,因爲jQuery UI類的UI小部件內容'是定義.ui-widget-content

{ 
border: 1px solid #fad42e; 
background: #fbec88 url(images/ui-bg_flat_55_fbec88_40x100.png) 50% 50% repeat-x; 
color: #363636; 
} 

並且只與設置的CSS 'background-color'你不真的改變背景顏色。因此,嘗試使用類似

var trElement = jQuery("#"+ options.rowId,jQuery('#list2')); 
trElement.removeClass('ui-widget-content'); 
trElement.addClass('state_active'); 
+0

聲音合乎邏輯,但不幸的是它不起作用 - ui-widget-content類不會被刪除。 我把它放在格式化程序調用和gridComplete函數中 - 什麼都沒有:( – Thomas 2010-05-29 22:38:36

+0

@Thomas。在'loadComplete'中填充行並且'gridComplete'中沒有,在我的''loadComplete'裏面,我總是推薦你你可以調用'jQuery('#list2')。getDataIDs();''inside或'loadComplete'方法來調用'gridview:true'參數。 ,使用'getCell()'測試單元格值,然後刪除並添加該類。 – Oleg 2010-05-30 03:57:08

+0

它仍然不起作用:( Aparantly它的B/C jQuery選擇器不能找到行ID - 對象是空的,儘管ID是在那裏。 ... id = 25.05.2010_00:00:00-26.05.2010_00:00:00 來自 的警報var l2 = jQuery('#list2'); (「id =」+ cl +「」+ l2.html()); var trElement = jQuery('「#'+ cl +'」',jQuery('#list2')); trElement.removeClass('ui-widget-content'); trElement.addClass('state_active'); trElement對於.html()爲空... – Thomas 2010-05-30 21:17:38

1

我建議大家儘量some​​ing這樣。 這實際上會讓你訪問整行。

afterInsertRow: function(rowid, aData, rowelem) 
    { 
     if (aData.field =='value'){  
      jQuery("#list1").setCell(rowid,'message','',{color:'red'}); 
     } 
    } 
+0

嗯,這至少工作:) 我會嘗試使用setRowData代替setCell,我希望這就是便宜但從執行時刻 - 這需要相當長的在我的測試vm上... – Thomas 2010-05-29 23:03:33

12

爲任何人找這個話題真正的答案..

這個作品!

afterInsertRow : function(rowid, rowdata) 
{ 
    if (rowdata.colmodelnamefield == "something") 
    { 
     $(this).jqGrid('setRowData', rowid, false, 'StyleCss'); 
    } 

} 

在另一個文件的樣式表自定義CSS


.StyleCss{ background-color:red !important; } 

不要忘了!重要的是要覆蓋主題UI輥

+0

同意。這工作完美。如果你需要將它設置爲正確的jquery ui css類,它是:$(this).jqGrid('setRowData',rowid,false,'ui-state-error'); – 2012-04-05 21:25:23

+0

它也適用於我,但只有當gridview沒有設置爲true時 – ymakux 2013-03-28 15:38:18

+0

我最終將類似的邏輯放到了gridComplete中,但是概念運行得很好。 – afreeland 2013-09-19 14:09:40

4

我已經試過上述解決方案,但我認爲一個是正確:

afterInsertRow : function(rowid, rowdata) 
{ 
    if (parseFloat(rowdata.amount) > 500) 
    { 
     $(this).jqGrid('setRowData', rowid, false, {color:'red'}); 
    } 
} 

如果css類位於撇號之間,則它被覆蓋原來的一個(你可以看到,很容易使用Firebug):

<tr class="ui-widget-content jqgrow ui-row-ltr RedStyle" ...> 

與{顏色: '紅色'}:正確

<tr class="ui-widget-content jqgrow ui-row-ltr" style="background: none repeat scroll 0pt 0pt red;" ...> 

根據setRowData的文檔:

如果cssprop參數是字符串,我們使用addClass將類添加到行中。如果參數是對象,我們使用css來添加css屬性

5

我在長時間的嘗試解決方案,最後從所有的例子和建議結合起來,爲我工作。當然你需要定義自定義CSS樣式才能使用。希望這會有所幫助,但它可能會產生潛在的速度問題。

...

loadComplete: function() { 

     var rowIDs = jQuery("#grid").getDataIDs(); 
     for (var i=0;i<rowIDs.length;i=i+1){ 
     rowData=jQuery("#grid").getRowData(rowIDs[i]); 
     var trElement = jQuery("#"+ rowIDs[i],jQuery('#grid')); 
     if (rowData.statusID > 5) { 
      trElement.removeClass('ui-widget-content'); 
      trElement.addClass('rowColorRED'); 
     }else{ 
      if (rowData.statusID == 1){ 
      trElement.removeClass('ui-widget-content'); 
      trElement.addClass('rowColorGREEN'); 
      } 
     } 
     } 
    }, 

...

1
afterInsertRow: function (rowid, rowdata) {              
    $(grid).jqGrid('setRowData', rowid, false, { background: 'red' }); 
} 

非常簡單,工作

0

假定其他單元格的值是Y/N。

以下代碼放在loadComplete事件

var rowIDs = jQuery("#GRID").getDataIDs(); //Get all grid row IDs 
for (var i = 0; i < rowIDs.length; i++) {  //enumerate rows in the grid 
    var rowData = $("#GRID").jqGrid('getRowData', rowIDs[i]); 
    //If condition is met (update condition as req) 
    if (rowData["COLNAME_CHECKED"] == "N") {   

     //set cell color if other cell value is matching condition 
     $("#GRID").jqGrid('setCell', rowIDs[i], "COLNAMEModified", "", { color: 'red' }); 
     //for row color, update style. The code is given above by **Ricardo Vieira** 
    } 
} 
+0

你能描述你的代碼嗎?爲什麼它有助於OP? – msrd0 2014-08-29 15:27:26

+0

@ user3755692:已添加評論。不知道你不清楚什麼。此代碼在加載時爲網格創建後的所有行填充單元格/行。如果您已經知道此代碼,則可能對其他人有所幫助。如果您認爲它沒用,請將其刪除。 – user3990701 2014-09-03 13:58:46

+0

儘可能好地描述你的代碼。我不認爲任何回答這個問題的答案都是無用的,但總會有一些答案比其他答案更有用 - 並且你決定哪個答案是有用的。 – msrd0 2014-09-03 15:03:17