【问题标题】:Set p:dataTable p:column width设置 p:dataTable p:列宽
【发布时间】:2013-09-15 22:10:07
【问题描述】:

我正在尝试设置数据表的列宽。我已经查看了这个问题的答案How to set width of a p:column in a p:dataTable in PrimeFaces 3.0?

然而,我正在尝试做一些不同的事情。我只希望该列与它显示的最宽元素一样宽。我的大部分数据都是文本。

例如,它不应该是这样的

----------------------------------------- |这是一些文字 | -----------------------------------------

应该是这样的

--------------------- |这是一些文字 | ---------------------

如果有多行,列应该和最宽的元素一样大。

【问题讨论】:

    标签: jsf primefaces datatable width


    【解决方案1】:

    我一直用

    <p:dataTable ........ tableStyle="width:auto">
    

    并且做我认为你期望你的数据表做的事情。

    【讨论】:

    • 如何强制页眉和分页器具有相同的宽度?
    • 这按我想要的方式工作,只是列和标题不再对齐。
    • 这里也一样。你能修好吗?
    • 这里相同...标题和列不再对齐
    • 设置 tableStyle={{width: 'auto'}} 对我使用反应包装器和设置 autoLayout={true} 没有,即使后者是文档中描述的方法。
    【解决方案2】:

    如果您希望表格宽度保持 100%,请使用

    tableStyle="table-layout: auto;"
    

    【讨论】:

    • 这按我想要的方式工作,只是列和标题不再对齐。
    • 您还可以将以下内容添加到您自己的自定义 .css 文件中,以覆盖默认居中标题的 Primefaces 样式,默认情况下居中:.ui-datatable thead th, .ui-datatable tfoot td { 文本对齐:左!重要; }
    【解决方案3】:

    Maco 的回答很有魅力。但是,对于那些数据列和标题未对齐的人,一种解决方案是为每个 &lt;p:column&gt; 添加一个样式,并使用所需的 min-width 属性(注意,对于 &lt;p:dataTable&gt; 的所有 &lt;p:column&gt;,它必须相同) .在你的 CSS 中定义一个样式类并使用&lt;p:column&gt; 中的 styleClass 属性来引用它可能更实用。这样,如果您决定更改最小宽度,您只需在一处更改即可。

    <p:column style="min-width: 100px;">
    ...
    </p:column>
    

    在 PF 5.3 中测试

    【讨论】:

    • @Kukeltje 我可以看到它在 PF 3.0 文档中被使用,所以至少在那个版本中,如果不是之前的话。
    • @Kukeltje 我可以向你保证它适用于 5.3。我放 3.0 是因为我检查了他们网页上当前发布的最古老的文档中是否有可能,如果造成混乱,请见谅。
    【解决方案4】:

    @Szarpul 的回答很好。我对其进行了扩展,以便您可以拥有固定的列、调整其宽度的列和占据其余部分的列。

    对于固定宽度,将宽度属性设置为所需的宽度。对于灵活宽度,将其设置为大于 0 的任何值。如果内容的宽度较长,它将增长到最长元素的宽度。样式可防止文本在每个空格处换行。对于占用剩余空间的列,不要定义宽度。您甚至可以使用更多没有宽度的列,然后它们将平均分配剩余空间。

    这是一个例子:

    <p:dataTable tableStyle="table-layout: auto;">
        <p:column width="300" headerText="Text" />
        <p:column width="300" headerText="Some more Text" />
        <p:column width="1" headerText="Text" style="white-space: nowrap;"/>
        <p:column width="1" headerText="Some more Text" style="white-space: nowrap;"/>
        <p:column headerText="Remainder" />
    </p:dataTable>
    

    这将如下所示:

    -------------------------------------------------- -------------------------------------- |正文 |更多文字 |正文 |更多文字 |剩余 | -------------------------------------------------- --------------------------------------

    这也适用于&lt;p:treeTable&gt;。我在 Chrome 84 和 IE 11 上测试了这两个组件的解决方案。

    【讨论】:

      【解决方案5】:

      tableStyle="width: auto !important; " 这也改变了标题的宽度

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-11-18
        • 2019-12-15
        • 2012-12-06
        • 1970-01-01
        • 2012-04-17
        • 2013-09-12
        • 2017-01-03
        相关资源
        最近更新 更多