2015-05-29 23 views
9

Tôi đang sử dụng mã sau đây để đặt chiều rộng cột của dữ liệu có thể đặt. Trong khi tải trang một phần chiều rộng có vẻ đúng và khi tải hoàn toàn, chiều rộng bị tắt.Chiều rộng cột không hoạt động trong datatables bootstrap

<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> 

Bảng Markup

<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> 
+0

Đánh dấu của bạn trông như thế nào? – davidkonrad

+0

Sử dụng autowidth của nó và không lấy chiều rộng tôi đã chỉ định. Vì vậy, các cột nhất định hẹp hơn tôi mong đợi. – alicewilliam86

+0

Vâng, đó là những gì chúng ta có thể thấy trong câu hỏi - nhưng đánh dấu của bạn như thế nào, cấu trúc bảng, i.e '

....' etc? – davidkonrad

Trả lời

3

Sử dụng các kịch bản sau khi xác định các đặc tính DataTable:

"cột": [ { "width": "25px"}, { "width": "25px"}, { "width ":" 450px "}, {" chiều rộng ":" 20px "}, {" chiều rộng ":" 20px "}, {" chiều rộng ":" 20px "}, {" width ":" 20px "} , {"chiều rộng": "20px"} ],

+6

Về trường hợp của tôi, tôi cũng cần thêm "autoWidth: false". Ở trên chỉ không làm việc cho tôi. – hsnkhrmn

+0

Đây là câu trả lời hay nhưng sẽ chỉ hoạt động với DataTables v1.10 trở lên. Câu hỏi của OP dường như đang sử dụng v1.9. – Kidquick

7

Sẽ được tốt đẹp để xem bảng của bạn trong hành động, nhưng tôi nhận được một cảm giác mạnh mẽ rằng đây là một vấn đề thuần túy của chiều rộng của nội dung. Các phần tử có display: table-cell sẽ cố gắng mở rộng để hiển thị nhiều nội dung nhất có thể mà không cần gói. Ví dụ: chiều rộng của <th> có chú thích "Bảo vệ du lịch", bạn xác định là 10% - bạn sẽ cần một bảng khá rộng để hiển thị "Bảo vệ du lịch" trong vòng 10%.

Vì vậy, bác bỏ những mặc định word-wrapword-break cài đặt cho <th> như thế này:

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

một loại bản demo (như đã nói, không thể chứng minh này để IRL bảng của bạn) ->http://jsfiddle.net/9vbz7thp/

Điều tốt nhất sẽ điều chỉnh nội dung của <th> để chúng phù hợp với chiều rộng được mã hóa.

Nếu đó là nội dung của <td> 's mọc quá lớn (thường là một loooong không vỡ từ):

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

BTW: Bạn không cần phải xác định độ rộng mã hóa cứng trong cả <th><td>' S. <td> 's tự động nhận được chiều rộng từ <th> tương ứng.

+0

Bảng của bạn không bao bọc khi bạn có từ không vi phạm. Xem fiddle được cập nhật: http://jsfiddle.net/9vbz7thp/32/ – kimli

+1

@kimli, điều này là do bạn nhắm mục tiêu sai 'table.dataTable thead tr td' trong fiddle được cập nhật, rõ ràng là phải có' table.dataTable TBODY tr td '-> ** http: //jsfiddle.net/9vbz7thp/33/** sau đó nó hoạt động. – davidkonrad

+0

Bạn nói đúng. Cảm ơn :) – kimli

2

Đối với Auto Adjustment, Thêm một cách rõ ràng này

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


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

"MyItemst" là gì? Tôi không thấy rằng bất cứ nơi nào trong OP. – Tony

2

Khi thiết lập cột độ rộng, bạn cũng cần phải thiết lập:

autoWidth: false 

... trên DataTable tự

+0

Giải pháp này giúp với vấn đề của tôi, nơi bảng với cùng một lớp cột nhận được chiều rộng khác nhau khi dataTable được kích hoạt. – Woody

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

    "autoWidth":false, 

là làm việc cho tôi

Các vấn đề liên quan