2015-06-22 4 views
9

questa è la prima volta che utilizzo il widget GridView di Yii2. Ho provato a impostare la larghezza di una colonna dopo aver letto alcune risposte qui su StackOverflow, ma semplicemente non funzionerà per me e mi piacerebbe che le colonne avessero larghezze diverse (specialmente la prima).Yii2 GridView non può impostare la larghezza della colonna

Ho provato a impostare la larghezza utilizzando 'contentOptions' direttamente per la prima colonna e anche con un file CSS esterno per la colonna del nome del prodotto.

Qualcuno può dirmi se c'è un'alternativa o se c'è qualcosa che sto sbagliando?

<?= 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']; 
      }, 
     ], 
    ], 
]); ?> 

risposta

0

Prova con un solo Options:

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

Grazie per la risposta rapida, ma purtroppo, questo non funzionerà per me (ho dimenticato di dire che ho fatto provalo prima, ho appena provato di nuovo e ho ottenuto lo stesso risultato) e davvero non capisco quale potrebbe essere il problema. – user2997695

+0

Ha funzionato per me. Hai controllato Firebug. La proprietà viene applicata? – Chinmay

+0

Suppongo di sì, ho visto solo il sorgente della pagina e mi è sembrato che i corrispondenti tag td avessero aggiunto lo stile. Ho anche notato che quando si rimuove la parte dell'intestazione della griglia, funziona, ma non era quello di cui avevo bisogno dal momento che si può usare il cercatore per l'ordinamento. Alla fine, mentre controllavo il CSS per la tabella, ho notato la tabella di layout: fisso e ho appena aggiunto una nuova classe per la tabella e impostare la tabella di layout: inherit. So che è una soluzione alternativa, ma sembra che funzioni nel modo in cui ne ho bisogno. Ancora non so perché nessuna delle altre soluzioni non funzionerà. Grazie per l'aiuto, tuttavia! – user2997695

4

Dipende da ciò che si cerca di raggiungere. Ma lo max-width con 20 pixel non è probabilmente quello che volevi davvero. Da provare con width:

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

Anche questo non funzionerà, sfortunatamente. – user2997695

+0

Ok. Quindi, per favore, dicci cosa stai cercando di ottenere e cosa ottieni o vedi attualmente. Che larghezza hai? Hai un URL pubblico? – robsch

+0

Ho finalmente gestito ciò che volevo fare, usando una soluzione alternativa: durante il controllo del CSS per la tabella, ho notato la tabella di layout: corretto e ho appena aggiunto una nuova classe per la tabella e impostare la tabella di layout: inherit. Quello che ho visto prima era che tutte le colonne avevano la stessa larghezza, quindi se avessi detto 2 colonne, 50% di larghezza per ognuna, per 3 colonne - 33% e do on. – user2997695

6

Se si desidera la larghezza impostata per singola colonna è possibile utilizzare headerOptions:

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

Questo potrebbe essere il risultato della proprietà white-space css, che interesseranno la larghezza della cella di una tabella a seconda sul contenuto in esso. Nel mio progetto Yii2 avevo:

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

Nessuno da consigli forniti qui non era utile per me. Ma questo è stato utile:

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

Ohh amico, sei un campione! L'unica soluzione che ha completamente risolto il problema. – Rev

4

si devono impostare in questo modo:

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

Con contentOptions è possibile impostare le opzioni per tutti i td per il "titolo" della colonna. In Site.css lo spazio bianco è impostato su nowrap per impostazione predefinita.

Ma se il contenuto è più lungo di 200 px, ad esempio, la colonna verrà ampliata per contenuto e ignorata.

0

io soluzione semplice ma funzionale è quello di creare l'impostazione di un max-width per un CSS colonne. Il flag !important garantisce che questa proprietà non venga annullata.

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

Quindi, è sufficiente registrarlo nella visualizzazione.

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

abbiamo e esempio di questo piano di lavoro in questa immagine here.

1

Prima Opzione aggiuntiva come

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

dopo che aggiungono di seguito le linee

[ 
    'attribute' => 'news_description', 
    'contentOptions' => [ 'style' => 'width: 25%;' ], 
],