Ширина столбца не работает в начальной загрузке DataTables

Я использую следующий код для установки ширины столбца DataTable. При частичной загрузке страницы ширина кажется правильной, а когда она загружается полностью, ширина отключена.

<script>
    $(document).ready(function () {
        $("#memberGrid").dataTable({
            "dom": 'T<"clear">lfrtip',
            "tableTools": {
                "sSwfPath": "../../Content/swf/copy_csv_xls.swf"
            },
            "destroy": true,
            "info": true,
            "bLengthChange": false,
            "bFilter": false,
            "bAutoWidth": false,
            "aoColumns": [{ "sWidth": "20%" }, { "sWidth": "20%" }, { "sWidth": "20%" }, { "sWidth": "10%" }, { "sWidth": "20%" }, { "sWidth": "10%" }]
        });
    });
</script>

Разметка стола

<table class="group-grid table table-hover table-bordered table-responsive zebra-striped" id="memberGrid">
                <thead class="tablehead">
                    <tr>
                        <th style="width: 20%">Name</th>
                        <th style="width: 20%">Room with</th>
                        <th style="width: 20%">Extensions</th>
                        <th style="width: 10%">Travel Protection</th>
                        <th style="width: 20%">Flying from</th>
                        <th style="width: 10%">Balance</th>
                    </tr>
                </thead>
                <tbody>
            <tr class="tablerows">
                <td style="width: 20%"><%# Eval("Travelers") %></td>
                <td style="width: 20%"><%# Eval("RoomMates")%></td>
                <td style="width: 20%"><%# Eval("Extensions")%></td>
                <td style="width: 10%"><%# (string) Eval("HasTpp") == "Y"? "Yes" : "No"%></td>
                <td style="width: 20%"><%# Eval("Airport")%></td>
                <td style="width: 10%">$<%# Eval("Balance")%></td>
            </tr>
            </tbody>
                    </table>

Ответ 1

При определении свойств datatable используйте следующий script:

"столбцы": [                         { "width" : "25px" },                         { "width" : "25px" },                         { "width" : "450px" },                         { "width" : "20px" },                         { "width" : "20px" },                         { "width" : "20px" },                         { "width" : "20px" },                         { "width" : "20px" }                 ],

Ответ 2

При настройке ширины колонок вам также необходимо установить:

autoWidth: false

... в самом DataTable

Ответ 3

Было бы приятно видеть вашу таблицу в действии, но я получаю сильное ощущение, что это чистое содержание ширины контента. Элементы с display: table-cell будут пытаться расширяться, чтобы показать как можно больше содержимого без обертывания. Например, ширина <th> с надписью "Защита путешествий", которую вы определяете как 10% - вам понадобится довольно широкая таблица, чтобы показать "Защита путешествий" в пределах 10%.

Таким образом, для <th> установите значения по умолчанию word-wrap и word-break по умолчанию:

table.dataTable thead tr th {
    word-wrap: break-word;
    word-break: break-all;
}

своего рода демонстрационная версия (как сказано, не может подтвердить это в вашей таблице IRL) → http://jsfiddle.net/9vbz7thp/

Лучше всего было бы отрегулировать содержимое <th>, чтобы они соответствовали жесткой кодировке.

Если содержимое <td> становится слишком большим (обычно это не ломающееся слово):

table.dataTable tbody tr td {
    word-wrap: break-word;
    word-break: break-all;
}

BTW: вам не нужно определять жестко кодированные ширины как в <th>, так и <td>. <td> автоматически получить ширину от соответствующего <th>.

Ответ 4

Для автоматической настройки добавьте это явно

var MyDatatable = $("#memberGrid").dataTable();


MyDatatable.columns.adjust().draw();

Ответ 5

 oTableDetails = $('#tblUserDetails').dataTable({

   "autoWidth":false,

работает для меня

Ответ 6

var reCalculateLayoutDatatable = function(){
reCalculateLayoutDatatableYN = true;
setTimeout(function(){
  var tableHeaderWidth = 0;
  $("body").find("div.dataTables_scrollHeadInner table tr.row-header th").each(function() {
    var cols = 1;
    if(parseInt($(this).attr("colspan")) > 1) {
      cols = parseInt($(this).attr("colspan"));
    }
    tableHeaderWidth += parseInt($(this).attr("data-col-width")) + (15 * cols);
  });
  $("body").find("div").css("width","auto");
  $("body").find("table").css("width","auto");
  $("body").find("div.dataTables_scrollBody table").css("width",tableHeaderWidth + "px");
  $("body").find("div.dataTables_scrollHeadInner table").css("width",tableHeaderWidth + "px");
  $("body").find("th,td").each(function(){
    if($(this).attr("data-col-width") > 0){
      $(this).css("width",$(this).attr("data-col-width") +"px");
    }
  });
},50);
}
$( window ).resize(function() {
   if (reCalculateLayoutDatatableYN == true) {
     reCalculateLayoutDatatable();
   }
});
$( document ).ready(function() {
    reCalculateLayoutDatatable();
});

HTML:

<table id="datatableLarge" class="table">
  <thead>
    <tr class="row-header" >
       <th data-col-width="100">管理番号</th>
       <th data-col-width="350">物件名</th>
       <th data-col-width="40">号室</th>
       <th data-col-width="100" >
          管理区分
       </th>
    </tr>
  </thead>
  <tbody>
     <tr>
       <td data-col-width="100">1234</td>
       <td data-col-width="350">物件1</td>
       <td data-col-width="40">号室1</td>
       <td data-col-width="100" >
          管理区分
       </td>
  </tbody>

Ответ 7

На самом деле мне пришлось использовать противоположный подход и удалить строку autoWidth (так же, как autoWidth: true) и не забыть поместить желаемую ширину в тот же объект, что и мои данные:

"columns": [{ 'data': 'account.organization_Name', width: '120px' }]

Как видно здесь: http://live.datatables.net/jatazeho/1/edit

Ответ 8

Единственное, что сработало для меня, - это установить встроенную min-width заголовка столбца:

    <table width="100%">
        <tr>
            <thead>
                <th>Ref</th>
                <th style="min-width: 100px">User</th>
                <th>Organisation</th>
            </thead>     
        </tr>
        ...
    </table>