PrimeNG DataTable предоставляет свойство [scrollable]
для определения вертикальной и / или горизонтальной прокрутки. Это должно использоваться с комбинацией набора scrollHeight
и / или scrollWidth
.
Как я могу получить таблицу, которая будет подстраиваться под любую высоту / ширину окна вместе с возможностью прокрутки?
Вот код, который я пробовал:
<div class="ui-g-12">
<p-dataTable class="ui-g-12" [value]="rows" [hidden]="this.apiService.spinnerIsVisible"
[style]="{ height: 'fit-content', 'margin-top': '10px' }"
[resizableColumns]="false" columnResizeMode="fit" emptyMessage="No records found"
[responsive]="false"
[globalFilter]="tableSearch"
[editable]="true"
[scrollable]="true" scrollHeight="100%" scrollWidth="100%">
<p-header>
<button pButton type="button" icon="fa-refresh" (click)="refresh()" style="float:left"></button>
<label for="tableSearch">Global search: </label>
<input id="tableSearch" #tableSearch type="text" placeholder="type here">
</p-header>
<p-column
*ngFor="let col of cols" [header]="col" [field]="col"
[style]="{'width': '250px', 'min-width': '50px', 'word-wrap': 'break-word'}"
[sortable]="true"
[filter]="true" filterPlaceholder="" filterMatchMode="contains"
[editable]="true">
</p-column>
</p-dataTable>
</div>
Но это решает только проблему отзывчивой ширины. На скриншоте вы видите таблицу с возможностью горизонтальной прокрутки:
Поскольку атрибут height
в p-dataTable
относится к родительскому элементу в случае процентного значения, я попытался заставить родительский div
соответствовать содержимому, добавив style="height: 100%"
к родительскому div
. Вот обновленный код:
<div class="ui-g-12" style="height: 100%">
<p-dataTable class="ui-g-12" [value]="rows" [hidden]="this.apiService.spinnerIsVisible"
[style]="{ height: 'fit-content', 'margin-top': '10px' }"
[resizableColumns]="false" columnResizeMode="fit" emptyMessage="No records found"
[responsive]="false"
[globalFilter]="tableSearch"
[editable]="true"
[scrollable]="true" scrollHeight="100%" scrollWidth="100%">
<p-header>
<button pButton type="button" icon="fa-refresh" (click)="refresh()" style="float:left"></button>
<label for="tableSearch">Global search: </label>
<input id="tableSearch" #tableSearch type="text" placeholder="type here">
</p-header>
<p-column
*ngFor="let col of cols" [header]="col" [field]="col"
[style]="{'width': '250px', 'min-width': '50px', 'word-wrap': 'break-word'}"
[sortable]="true"
[filter]="true" filterPlaceholder="" filterMatchMode="contains"
[editable]="true">
</p-column>
</p-dataTable>
</div>
Я также внес следующие изменения в свой styles.scss
файл, чтобы он заработал (нашел это в другом вопросе по stackoverflow):
html, body {
height: 100%;
}
Но и у меня это не сработало: На скриншоте высота кажется правильной, но это не так. Когда я прокручиваю вниз, сначала все идет как надо, но затем, когда я приближаюсь к концу таблицы, полоса прокрутки выходит из поля зрения, поэтому я не вижу ее, пока все еще могу прокручивать. Похоже, что datatable немного выше, чем должен быть.
Итак, как мне решить эту проблему? Любая помощь будет оценена по достоинству!