I have Mat table with multiple rows, with add button ,on click of it, adds a new row. i want to add validations for all the rows ,right now my code below is taking a validation only for any one row.
my component.html
<form [formGroup]="auditUserValidation">
<mat-table [dataSource]="dataSource">
<ng-container matColumnDef="Audit">
<mat-header-cell *matHeaderCellDef> Name </mat-header-cell>
<mat-cell *matCellDef="let element">
<mat-select formControlName="name" placeholder="Pls select">
<mat-option [value]="audit" *ngFor="let name of nameList">{{name.firstname}}</mat-option>
</mat-select></mat-cell>
</ng-container>
<ng-container matColumnDef="Country">
<mat-header-cell *matHeaderCellDef> Country</mat-header-cell>
<mat-cell *matCellDef="let element">
<mat-select formControlName="Country" placeholder="Pls select">
<mat-option [value]="audit" *ngFor="let country of CountryList">{{country.name}}</mat-option>
</mat-select></mat-cell>
</ng-container>
<mat-header-row *matHeaderRowDef="displayedColumns"></mat-header-row>
<mat-row *matRowDef="let row; columns: displayedColumns;"></mat-row>
</mat-table>
Save button which i want to disable if all rows not selected
<button type="button" (click)="addElement()"> <i class="material-icons">add</i>Add</button>
<button type="button" [disabled]='auditUserValidation.invalid' (click)="submitReport()">Save</button>
my component.ts file
auditUserValidation: FormGroup;
constructor(private formBuilder: FormBuilder }
ngOnInit() {
this.auditUserValidation = this.formBuilder.group({
name: ['', [Validators.required]],
Country: ['', [Validators.required]],
});
}
In general, you has a formArray. As always, we has a function that return a formGroup
After create the formArray, we make the "dataSource" formArray.controls
So, the only is ask about
e.g.
See the stackblitz
Updated add and remove rows
(*) the
displayedColumns
becomes likeTwo functions serve to add and remove rows
where
table
is