Reputation: 3841
PrimeNg datatable uses built in [filter]="true"
. This will create a input text box internally that is used to filter data. How can I place this textbox
outside the datatable
and get the filter done for a particular column?
Upvotes: 2
Views: 19204
Reputation: 1139
Below is the code with external dropdown to filter the primeng datatable.
html page:
<!-- Top of the page -->
<div>
<p-dropdown [options]="orgs" [(ngModel)]="selectedOrg" (onChange)="updateOrgFilter(dt);getFilteredOutput($event,dt)" styleClass="ui-column-filter"></p-dropdown>
</div>
<!-- Pie Chart -->
<!-- Bar Chart -->
<!-- Datatable -->
<p-dataTable #dt [value]="itemslist" [rows]="30" [paginator]="true" [rowsPerPageOptions]="[30,50,75]" sortMode="multiple" scrollable="true" resizableColumns="true" scrollHeight="350px">
<p-header>
<div class="ui-helper-clearfix">
List of Items
</div>
</p-header>
<p-column [style]="{'width':'100px'}"field="wipJobNum" header ="Title" [sortable]="true" [filter]="true" ></p-column>
<p-column [style]="{'width':'150px'}"field="partNum" header ="Part Number" [sortable]="true" [filter]="true" ></p-column>
<p-column [style]="{'width':'90px'}" field="org" header ="Org" [sortable]="true" [filter]="true" filterMatchMode="equals">
<ng-template pTemplate="filter" let-col>
<p-dropdown [options]="orgs" [(ngModel)]="selectedOrg" appendTo="body" [style]="{'width':'100%'}" (onChange)="dt.filter($event.value,col.field,col.filterMatchMode);getFilteredOutput(event,dt)" styleClass="ui-column-filter"></p-dropdown>
</ng-template>
</p-column>
</p-dataTable>
component.ts:
updateOrgFilter(dt) {
dt.filter(this.selectedOrg, 'org', 'equals');
}
In this example if you change value of org drop down inside the datatable , then the external dropdown will change and my charts will be updated. if you change the external drop down value then primeng datatable filter will be updated and displays the filtered output + charts will be updated.
Upvotes: 5
Reputation: 3822
Please have a look at https://www.primefaces.org/primeng/#/table/filter
If you replace dt.filterGlobal($event.target.value, 'contains')
with dt.filter($event.target.value, 'your field name','contains')
, the datatable will filter with the field.
If you have an external search field, call the same function from the event handler.
Upvotes: 2
Reputation: 3841
After searching entire primeng documentation I found that primeng currently do not support this feature. We will have to filer the data by ourselves and update prime ng datatable [value]
model.
Upvotes: 1
Reputation: 864
Exactly like the example on the showcase.
DataTable Filtering - Global Filter
Upvotes: -4