2012-05-28 29 views
1

我使用的是带有PHP和MySQL的DataTable,效果很好,但是我有很多麻烦设置行的类。 我的SQL表有一个名为“class_style”的列,其中包含一些值,如“blue_class”,“green_class”,“red_class”......无法在DataTables中设置行类

我的目标是在结果的每一行上声明这个类名我可以(例如)显示红色背景的“red_class”行,例如http://www.datatables.net/release-datatables/examples/basic_init/zero_config.html,其中红色显示。

我想会的工作代码如下:

echo "<tbody>"; 
    for($i=0; $i < $number_of_results; $i++){ 
     echo "<tr class='" . mysql_result($result, $i, 'class_style') . "'>";; 
      echo "<td>" . mysql_result($result, $i, 'family_name') . "</td>"; 
      echo "<td>" . mysql_result($result, $i, 'team') . "</td>"; 
     echo "</tr>";   
    }; 
echo "</tbody>"; 

,当我打开网页与正在显示下面的类表的每一行的浏览器:

<tr class='odd'> 
<tr class='even'> 

即使如果我使用的自动化程度较低的解决方案如下所示

echo "<tbody>"; 
    for($i=0; $i < $number_of_results; $i++){ 
     echo "<tr class='my_class'>";; 
      echo "<td>" . mysql_result($result, $i, 'family_name') . "</td>"; 
      echo "<td>" . mysql_result($result, $i, 'team') . "</td>"; 
     echo "</tr>";   
    }; 
echo "</tbody>"; 

所有类都变成

<tr class='my_class odd'> 
<tr class='my_class even'> 

我怎么能得到这个问题的解决方案?我想达到以下结果:

<tr class='green_class'> 
    <td>Smith</td> 
    <td>the Duck</td> 
</tr> 
<tr class='red_class'> 
    <td>Jackbson</td> 
    <td>Big great team</td> 
</tr> 
<tr class='green_class'> 
    <td>Awaiters</td> 
    <td>the flowers</td> 
</tr> 

回答

0

尝试

echo "<tbody>"; 
    for($i=0; $i < $number_of_results; $i++){ 
     if($i%2==0){ 
      echo "<tr class='even'>"; 
      else 
      echo "<tr class='odd'>"; 
      echo "<td>" . mysql_result($result, $i, 'family_name') . "</td>"; 
      echo "<td>" . mysql_result($result, $i, 'team') . "</td>"; 
     echo "</tr>";   
    }; 
echo "</tbody>"; 
4

它看起来像你渲染表在服务器端,然后将其发送回客户端,之后,你正在调用DataTables。那是对的吗?

另一种方法是在“server-side processing”模式下使用DataTables,这意味着服务器只会发送当前“页面”的数据的JSON。或者,如果你的数据源不是特别大,你可以使用一个Ajax源代码(它也应该返回JSON,但是整个数据集)。然后,您可以使用fnRowCallback函数对行进行样式设置[现在简称为“rowCallback”,自1.10开始)。您可以从数据集中获取类名,并使用jQuery将其添加到行中。

事情是这样的:

"fnRowCallback": function(nRow, aData, iDisplayIndex, iDisplayIndexFull) { 
    var rowClass = aData[4] // imagining that your class is found in column 4 
    $(nRow).addClass(rowClass); 
    } 
} 


作为一个完全迂腐抛开你可以忽略(因为它只是我戳我的鼻子它没有被邀请),使用彩色类可能不是最佳长期的决定。我认为“红色”,“绿色”等都对应于某种记录的状态。也许“绿色”意味着“目前活跃”或类似的东西。你应该使用反映目的而不是外观的类,因为有一天你可能会认为“紫色”实际上是一种更好的颜色来表示“当前活跃”(或其他)。

1

看到,如果你添加的行,你需要添加独特的类此行

var table = $('#example').DataTable(); 
var id = 99; 

table 
    .row 
    .add(['cell-1', 'cell-2', 'cell-3', 'cell-4',]) 
    .draw() 
    .nodes() 
    .to$() 
    .addClass('js__list-item-'+id); 

,并导致

<tr class="js__list-item-99 odd" role="row"> 
    <td>cell-1</td> 
    <td>cell-2</td> 
    <td>cell-3</td> 
    <td>cell-4</td> 
</tr> 
2

检查文档:

'DT_RowClass' => 'class', 

这是从他们的论坛拉直在这里: https://datatables.net/reference/option/createdRow

我解决这个问题是这样的:

jQuery('.js-dataTable-full').dataTable({ 
     "processing": true, 
     "serverSide": true, 
     "ajax": "/path/to/ajax", 
     "createdRow": function(row, data, index) { 
      if(data.condition) { 
       $(row).addClass('warning'); 
      } 
     }, 
});