0

I have a p-dataTable with nested p-dropdown components. On selection of a row, how can I get the selected values of the row? In the selection callback I receive the array backing each dropdown, and not the selection itself.

enter image description here

<p-dataTable [value]="affiliates" sortField="name" dataKey="id"  selectionMode="single" (onRowSelect)="onRowSelect($event)" [rows]="15" [paginator]="true" [pageLinks]="10">
    <p-column field="name" header="Name" sortable="true" [filter]="true" filterPlaceholder="Search" filterMatchMode="contains"></p-column>    
    <p-column field="package" header="Packages">
        <ng-template let-affiliate="rowData" pTemplate type="body">
            <p-dropdown [options]="affiliate.packages" dataKey="label"></p-dropdown>
        </ng-template>
    </p-column>
    <p-column field="country" header="Countries">
        <ng-template let-affiliate="rowData" pTemplate type="body">
            <p-dropdown [options]="affiliate.countries" dataKey="label"></p-dropdown>
        </ng-template>
    </p-column>
    <p-column field="device" header="Devices">
        <ng-template let-affiliate="rowData" pTemplate type="body">
            <p-dropdown [options]="affiliate.devices" dataKey="label"></p-dropdown>
        </ng-template>
    </p-column>
    <p-column header="Actions">

    </p-column>
</p-dataTable>
Steve
  • 53,375
  • 33
  • 96
  • 141

1 Answers1

0

You can access the row data using the event.data property in the callback event.

<p-dataTable [value]="affiliates" sortField="name" dataKey="id"  selectionMode="single" (onRowSelect)="onRowSelect($event)" [rows]="15" [paginator]="true" [pageLinks]="10">
    <p-column field="name" header="Name" sortable="true" [filter]="true" filterPlaceholder="Search" filterMatchMode="contains"></p-column>    
    <p-column field="package" header="Packages">
        <ng-template let-affiliate="rowData" pTemplate type="body">
            <p-dropdown [(ngModel)]="name.selectedPackage" [options]="affiliate.packages" dataKey="label"></p-dropdown>
        </ng-template>
    </p-column>
    <p-column field="country" header="Countries">
        <ng-template let-affiliate="rowData" pTemplate type="body">
            <p-dropdown [(ngModel)]="country.selectedCountry"
             [options]="affiliate.countries" dataKey="label"></p-dropdown>
        </ng-template>
    </p-column>
    <p-column field="device" header="Devices">
        <ng-template let-affiliate="rowData" pTemplate type="body">
            <p-dropdown [(ngModel)]="device.selectedDevice"
             [options]="affiliate.devices" dataKey="label"></p-dropdown>
        </ng-template>
    </p-column>
    <p-column header="Actions">

    </p-column>
</p-dataTable>

Call back event will look as

onRowSelect(event){
    this.selectedData=event.data
}

LIVE DEMO

Sangwin Gawande
  • 7,658
  • 8
  • 48
  • 66
Aravind
  • 40,391
  • 16
  • 91
  • 110