【发布时间】:2014-11-11 08:03:39
【问题描述】:
我们有一个如图所示的数据表。有 3 个冻结列,其余可滚动。如图所示,冻结的列未对齐。如果删除了冻结列属性,则表格看起来正确。任何解决问题的建议。
【问题讨论】:
标签: jsf-2 primefaces datatable
我们有一个如图所示的数据表。有 3 个冻结列,其余可滚动。如图所示,冻结的列未对齐。如果删除了冻结列属性,则表格看起来正确。任何解决问题的建议。
【问题讨论】:
标签: jsf-2 primefaces datatable
我们在类似的用例中遇到了同样的问题。 据我所知,没有很好的解决方案。
我们解决的最简单的方法是在每次重绘数据表时调整较小的 tr 和 th 的高度(包括排序等 ajax 事件)
另一种可能的方法是防止不同的高度,例如防止线条断裂。
【讨论】:
Primefaces 数据表冻结:
冻结的数据表有两部分左(固定)和右(动态/可滚动)
<script type='text/javascript'>
function synchronizeRowsHeight() {
//aligning table header row
var $leftHeaderRow = $('.ui-datatable-frozenlayout-left .ui-datatable-scrollable-header-box tr');
var $rightHeaderRow = $('.ui-datatable-frozenlayout-right .ui-datatable-scrollable-header-box tr');
$leftHeaderRow.outerHeight(35);//height(px) in int
$rightHeaderRow.outerHeight(35);//height(px) in int
//aligning table data rows
var $leftRows = $('.ui-datatable-frozenlayout-left .ui-datatable-scrollable-body tr');
var $rightRows = $('.ui-datatable-frozenlayout-right .ui-datatable-scrollable-body tr');
$leftRows.each(function (index) {
var $leftRow = $leftRows.eq(index);
var $rightRow = $rightRows.eq(index);
$rightRow.innerHeight($leftRow.innerHeight());
$leftRow.innerHeight($rightRow.innerHeight());
});
}
</script>
从你的 bean 中调用上面的 javascript 函数
RequestContext.getCurrentInstance().execute("synchronizeRowsHeight();");
【讨论】:
过去我在冻结数据表和在不同帖子中使用许多不同的脚本时遇到过类似的问题,我发现以下脚本适用于所有浏览器,并且不需要您设置它会计算它的高度。作为一个额外的好处,它还会触发一个浏览器事件来强制表格正确调整大小。
synchronizeRowsHeight : function() {
var $leftRows = $('.ui-datatable-frozenlayout-left').find('tr');
var $rightRows = $('.ui-datatable-frozenlayout-right').find('tr');
$leftRows.each(function(index) {
var $leftRow = $(this);
var $leftHeight = $leftRow.innerHeight();
var $rightRow = $rightRows.eq(index);
var $rightHeight = $rightRow.innerHeight();
if ($rightHeight > $leftHeight) {
$leftRow.innerHeight($rightHeight);
var diff = $rightHeight - $leftRow.innerHeight();
if (diff != 0)
$leftRow.innerHeight($rightHeight + diff);
} else if ($rightHeight < $leftHeight) {
$rightRow.innerHeight($leftHeight);
var diff = $leftHeight - $rightRow.innerHeight();
if (diff != 0)
$rightRow.innerHeight($leftHeight + diff);
}
})
// fire a resize event to tell the table to repaint
$(window).trigger('resize');
}
【讨论】: