2015-06-22 19 views
9

đây là lần đầu tiên tôi đang sử dụng Widget Widget Yii2. Tôi đã cố gắng thiết lập chiều rộng của một cột sau khi đọc một số câu trả lời ở đây trên stackoverflow, nhưng nó sẽ không làm việc cho tôi và tôi sẽ thích nó nếu các cột có độ rộng khác nhau (đặc biệt là đầu tiên).Yii2 GridView không thể đặt chiều rộng cột

Tôi đã thử đặt chiều rộng bằng cách sử dụng 'contentOptions' trực tiếp cho cột đầu tiên và cũng có tệp CSS bên ngoài cho cột tên sản phẩm.

Ai đó có thể vui lòng cho tôi biết nếu có sự thay thế hoặc nếu có điều gì đó tôi đang làm sai?

<?= GridView::widget([ 
    'dataProvider' => $dataProvider, 
    'filterModel' => $searchModel, 
    'columns' => [ 
     [ 
      'class' => 'yii\grid\SerialColumn', 
      'contentOptions' => ['style' => 'max-width:20px;'], 
     ], 

     [ 
      'format' => 'raw', 
      'label' => 'Image', 
      'value' => function ($data) { 
       $url = $data->imgSrc; 
       return Html::img($url, ['width' => '40px']); 
      }, 
     ], 

     [ 
      'attribute' => 'name', 
      'format' => 'raw', 
      'label' => 'Product name', 
      'contentOptions' => function ($model, $key, $index, $column) { 
       return ['class' => 'tbl_name']; 
      }, 
     ], 
    ], 
]); ?> 

Trả lời

0

Hãy thử với chỉ Options:

[ 
     'class' => 'yii\grid\SerialColumn', 
     'options' => ['style' => 'max-width:20px;'], 
], 
+0

Cảm ơn bạn đã trả lời nhanh chóng, nhưng không may, điều này sẽ không làm việc cho tôi (tôi quên đề cập đến tôi đã làm thử nó trước, chỉ cần thử lại lần nữa và tôi nhận được kết quả tương tự) và tôi thực sự không hiểu vấn đề có thể là gì. – user2997695

+0

Nó làm việc cho tôi. Bạn đã kiểm tra trong firebug. Tài sản có được áp dụng không? – Chinmay

+0

Tôi đoán là vậy, tôi chỉ xem nguồn trang và có vẻ như các thẻ td tương ứng đã được thêm vào kiểu. Tôi cũng nhận thấy rằng khi loại bỏ phần tiêu đề của lưới, nó hoạt động, nhưng đó không phải là những gì tôi cần vì bạn có thể sử dụng máy nghe để phân loại. Cuối cùng, trong khi kiểm tra CSS cho bảng, tôi nhận thấy bảng bố trí: cố định và tôi vừa thêm một lớp mới cho bảng và thiết lập bảng bố trí: kế thừa. Tôi biết đó là một cách giải quyết, nhưng có vẻ như tôi đang làm việc theo cách tôi cần nó để làm việc. Vẫn không biết tại sao bất kỳ giải pháp nào khác sẽ không hoạt động. Cảm ơn bạn đã giúp đỡ, tuy nhiên! – user2997695

4

Nó phụ thuộc vào những gì bạn đang cố gắng để đạt được. Nhưng max-width với 20 pixel có lẽ không phải là những gì bạn thực sự muốn. Hãy thử nó với width:

[ 
    'class' => 'yii\grid\SerialColumn', 
    'contentOptions' => ['style' => 'width:100px;'], // not max-width 
], 
+0

Điều này sẽ không hoạt động, thật không may. – user2997695

+0

OK. Sau đó, hãy cho chúng tôi biết những gì bạn đang cố gắng đạt được những gì bạn hiện đang có hoặc xem. Bạn có chiều rộng nào? Bạn có URL công khai không? – robsch

+0

Cuối cùng tôi đã quản lý những gì tôi muốn làm, bằng cách sử dụng một cách giải quyết: trong khi kiểm tra CSS cho bảng, tôi nhận thấy bảng bố trí: cố định và tôi vừa thêm một lớp mới cho bảng và thiết lập bảng bố trí: kế thừa. Những gì tôi thấy trước đây là tất cả các cột có cùng chiều rộng, vì vậy nếu tôi đã nói 2 cột, 50% chiều rộng cho mỗi cột, cho 3 cột - 33% và thực hiện. – user2997695

6

Nếu bạn muốn thiết lập chiều rộng cho cột duy nhất bạn có thể sử dụng headerOptions:

[ 
    'attribute' => 'attribute_name', 
    'headerOptions' => ['style' => 'width:20%'], 
], 
3

Đây có thể là kết quả của tài sản white-space css, mà sẽ ảnh hưởng đến độ rộng ô trong bảng tùy về nội dung trong đó. Trong dự án Yii2 của tôi, tôi có:

.grid-view td { 
    white-space: nowrap; 
} 

Không ai từ những lời khuyên được cung cấp ở đây không hữu ích cho tôi. Nhưng điều này là hữu ích:

.grid-view td { 
    white-space:pre-line; // or just 'normal' 
} 
+0

Ohh người đàn ông, bạn là nhà vô địch! Giải pháp duy nhất đã giải quyết được hoàn toàn vấn đề. – Rev

4

bạn phải thiết lập nó như thế này:

<?= GridView::widget([ 
     'dataProvider' => $dataProvider, 
     'filterModel' => $searchModel, 
     'columns' => [ 
      [ 
       'attribute'=>'title', 
       'contentOptions' => ['style' => 'width:200px; white-space: normal;'], 
      ], 
     ] 
    ] 
); 
?> 

Với contentOptions bạn có thể thiết lập tùy chọn cho tất cả td cho cột "title". Trong Site.css là không gian trắng được thiết lập để nowrap theo mặc định.

.grid-view td { 
    white-space: nowrap; 
} 

Nhưng nếu nội dung của bạn dài hơn 200px chẳng hạn, col sẽ được mở rộng theo nội dung và bỏ qua.

0

Tôi giải pháp đơn giản nhưng chức năng là để tạo ra một CSS thiết lập một max-width cho cột. Cờ !important là để đảm bảo rằng thuộc tính này không bị quá tải.

td { 
    max-width: 800px; 
    white-space: normal !important; 
} 

Sau đó, bạn chỉ cần đăng ký nó trong chế độ xem của bạn.

$this->registerCssFile('css/tableColumnMaxWidht.css'); 

Chúng tôi có và ví dụ về bảng này làm việc trong hình ảnh này here.

1

add Đầu tiên lựa chọn như

GridView::widget([ 
    'dataProvider' => $dataProvider, 
    'filterModel' => $searchModel, 
    'options' => [ 'style' => 'table-layout:fixed;' ], 

sau đó thêm bên dưới dòng

[ 
    'attribute' => 'news_description', 
    'contentOptions' => [ 'style' => 'width: 25%;' ], 
], 
Các vấn đề liên quan