How to make a single Primeng DataTable row editable on a button click using in Angular 2

送分小仙女□ 提交于 2019-12-10 10:30:56

问题


I am trying to use DataTable from Primeng in Angular 2.

I am displaying set of rows in datatable having a column for Edit button.

On click of edit button of any row, all fields of that row should be editable.

HTML:

 <p-dataTable [value]="testcases" [(selection)]="selectedTestCases" dataKey="ModuleID" [editable]="true" sortMode="multiple">
         <p-column [style]="{'width':'10 px'}" selectionMode="multiple"></p-column>
        <p-column field="ModuleID" [editable]="isEditable" header="ModuleID"></p-column>
        <p-column field="TestCaseID" [editable]="isEditable" header="TestCaseID"></p-column>
        <p-column field="EstimatedTime" [editable]="isEditable" header="EstimatedTime"></p-column>
          <p-column field="isEditable"  header="Edit" [editable]="isEditable">
                <ng-template let-col let-row="rowData" let-index="rowIndex"  pTemplate="body" >
                    <span>
                        <input type="button" value="Edit" (click)="edit(row,index)" /> 
                    </span>
                </ng-template>

          </p-column>

Angular Component:

edit(rowdata:TestCases,index:number) {

this.selectedTestCases=rowdata
rowdata.isEditable=true;
 }

With this code, property of that row is set to editable, but in UI fields are not editable.

Am I doing anything wrong?

Any help is appreciated.


回答1:


use this function on rowClick to get the clicked row -

     onRowSelectClick(e){
           console.log(e);
           this.CloseAllEditable();
           e.data.isEditable=true;
      }
    CloseAllEditable(){
        for(let item of this.testcases){
          if(item.isEditable){
            item.isEditable = false;
          }
        }
      }

    <p-column field="EstimatedTime" header="EstimatedTime">
        <template let-col let-row="rowData" let-index="rowIndex"  pTemplate="body">
            <span *ngIf="!row.isEditable">{{row.EstimatedTime}}</span>
           <span *ngIf="row.isEditable"><input type="text" [(ngModel)]="row.EstimatedTime"></span>
        </template>
       </p-column>




回答2:


I had a similar problem, and resolved it using 2 divs in each p-column, one for showing the data if the row isn't editable, and another div if the row it's editable.

Something like this.

<p-column field="ModuleID" [editable]="isEditable" header="ModuleID">
    <ng-template let-row="rowData" pTemplate="body">
        <div *ngIf="!row.isEditable">{{row.ModuleID}}</div>
        <div *ngIf="row.isEditable">
          <input type="text" [(ngModel)]="row.ModuleID">
        </div>
    </ng-template>
</p-column>


来源:https://stackoverflow.com/questions/45612676/how-to-make-a-single-primeng-datatable-row-editable-on-a-button-click-using-in-a

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!