Как установить ширину столбца p: в таблице p: dataTable в PrimeFaces 3.0? - PullRequest
34 голосов
/ 15 сентября 2011

Я использую PrimeFaces 3.0-M3, и у меня есть <p:dataTable> с двумя столбцами в нем. Я хочу, чтобы первый столбец был зафиксирован на ширине 20 пикселей. Другой столбец может использовать любой оставшийся пробел.

Вот скриншоты того, что я сейчас получаю:

screenshot 1

screenshot 2

Первый <p:column>, похоже, игнорирует настройку style, которая должна была ограничить ширину. Его размер слишком велик для крошечного цветного квадрата, который является единственным содержимым внутри него, а затем другой столбец перемещается слишком далеко вправо.

Вот еще мой код Facelet:

<p:dataTable
        id="dataTableExpressions"
        value="#{catconBean.userDefinedExpressionDataModel}"
        var="currentRow"
        emptyMessage="!! EMPTY TABLE MESSAGE !!"
        selection="#{catconBean.userDefinedExpressionToEdit}"
        selectionMode="single">
    <p:ajax 
            event="rowSelect" 
            listener="#{catconBean.onUserDefinedExpressionRowSelect}"
            update=":toolbarForm:catconToolbar" />
    <p:ajax 
            event="rowUnselect" 
            listener="#{catconBean.onUserDefinedExpressionRowUnselect}"
            update=":toolbarForm:catconToolbar" />

    <p:column id="paletteColor" style="width:20px;">
        <h:panelGroup 
                layout="block"
                rendered="#{not empty currentRow.paletteColor}"
                style="width:16px;height:16px;border:thin;border-style:solid;border-color:black;background-color:##{currentRow.paletteColor.RGB};" />
        <h:panelGroup 
                layout="block"
                rendered="#{empty currentRow.paletteColor}"
                style="width:16px;height:16px;border:thin;border-style:dashed;border-color:red;background-color:white;text-align:center;">
            <h:outputText value="?" style="color:red;font-weight:bold;" />
        </h:panelGroup>
    </p:column>

    <p:column id="name">
        <f:facet name="header">
            <h:outputText value="#{bundle.catcon_label_CategoryName}" />
        </f:facet>
        <h:outputText 
            value="#{currentRow.name}"
            style="#{not currentRow.definitionComplete ? 'color:red;' : ''}" />
    </p:column>
</p:dataTable>

Может кто-нибудь сказать мне, как изменить мой код Facelet, чтобы первый столбец имел фиксированную ширину 20 пикселей?

Ответы [ 8 ]

34 голосов
/ 15 сентября 2011

В PrimeFaces 3.0 этот стиль применяется к сгенерированной внутренней <div> ячейке таблицы, а не к <td>, как вы (и я) ожидаете.Следующий пример должен работать для вас:

<p:dataTable styleClass="myTable">

с

.myTable td:nth-child(1) {
    width: 20px;
}

В PrimeFaces 3.5 и выше он должен работать именно так, как вы кодировали и ожидали.

13 голосов
/ 14 мая 2014

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

<p:column headerText="name" style="width:20px;"/>
3 голосов
/ 27 января 2017

Почему-то это не сработало

<p:column headerText="" width="25px" sortBy="#{row.key}">

Но это сработало:

<p:column headerText="" width="25" sortBy="#{row.key}">
2 голосов
/ 13 марта 2013

Я не знаю, какой браузер вы используете, но, согласно w3schools.com, nth-child и nth-last-child теперь работают над MSIE 8. Я не знаю о 9. http://www.w3schools.com/cssref/pr_border-style.asp даст вам больше информации.

0 голосов
/ 05 февраля 2018

Встроенный стиль будет работать в любом случае

  <p-column field="Quantity" header="Qté" [style]="{'width':'48px'}">
0 голосов
/ 16 сентября 2015

Дополнение к ответу @BalusC. Вам также необходимо установить ширину заголовков. В моем случае ниже css может применяться только к ширине столбца моей таблицы.

.myTable td:nth-child(1),.myTable th:nth-child(1) {
   width: 20px;
}
0 голосов
/ 24 апреля 2014

Я просто сделал следующее (в V 3.5), и это сработало как шарм:

<p:column headerText="name" width="20px"/>
0 голосов
/ 07 марта 2013

можете попробовать

<p:column width="20">
...