setColumnDefs и setRowData не работают при загрузке динамических c столбцов и строк в ag-grid - PullRequest
0 голосов
/ 26 апреля 2020

enter image description here

ниже: JSON данные

var dataset =

[{
        "studentname": "Rockey",
        "age": 13,
        "average": 8.2,
        "exam": [{"Status": "Pass", "TimeStamp": "2019-03-12 08:19:50", "UserId": "123"},
         {"Status": "Pass", "TimeStamp": "2019-03-12 08:19:50", "UserId": "456"},
         {"Status": "Fail", "TimeStamp": "2019-03-12 08:19:50", "UserId": "789"}]
      },
      {
        "studentname": "Jony",
        "age": 13,
        "average": 8.2,
        "exam": [{"Report": "Pass", "TimeofReport": "2019-03-12 08:19:50", "ReportId": "333"},
        {"Report": "Pass", "TimeofReport": "2019-03-12 08:19:50", "ReportId": "444"},
         {"Report": "Fail", "TimeofReport": "2019-03-12 08:19:50", "ReportId": "555"}]
      }]

Используя данные выше, у меня есть один раскрывающийся список, где у меня есть весь список StudentName, например Рокки, Джони, как вы видите в JSON, и используя массив экзаменов, я хочу создать динамический заголовок c вместе с его динамическими c данными в сетке ag. Предположим, что пользователь выбрал Rockey из выпадающего списка, тогда заголовок должен быть «status», «TimeStamp» и «Userid», а когда пользователь выбирает Jony из выпадающего списка, тогда снова меняется заголовок сетки вместе с такими данными, как «Report», «Pass», "ReportId".

<ag-grid-angular " 
class="ag-theme-balham"
#agGrid
[columnDefs]="columnDefs"
id="newGrid"
[enableSorting]="true"
[enableFilter]="true"
[modules]="modules"
[paginationAutoPageSize]="true"
[rowData]="rowData"
[rowSelection]="rowSelection"
(gridReady)="onGridReady($event)"
[pagination]="true">>
</ag-grid-angular>

Часть объявления переменной

  tableData: string[] = [];
  tableList: string[] = [];
  tableName: string;
  pushHeader:any=[{}];
  exam: any;
  tableColumns: [{headerName: string, field: string}] = this.pushHeader;
  tableRecord: {};

logi c:

constructor() {
    this.GetGridData();
    this.gridOptions = <GridOptions>{
      rowData: this.tableData,
      columnDefs: this.tableColumns,  //Collecting headers and pushing to grid
      onGridReady:(event: any) => {
        this.gridOptions.api = event.api;
        this.gridOptions.api.setColumnDefs(this.tableColumns);
        this.gridOptions.api.setRowData(this.rowData);
        console.log("Headers",this.tableColumns);
      }
    }

 }

Метод сбора динамических c заголовков и его связанные данные




 public GetGridData() {
          //This is commented code I was trying with gridApi method but no output generated so ignore below commented code
         //var params = { force: true };
         // this.gridApi = params["api"];
         // this.gridcolumnApi = params["columnApi"];
         // params["api"] = this.exam;


         //I have applied logic to process on exam array if user select studentname like Rockey from drop 
 down then its corresponding data should display in grid

         this.exam=[{"Status": "Pass", "TimeStamp": "2019-03-12 08:19:50", "UserId": "123"},
                   {"Status": "Pass", "TimeStamp": "2019-03-12 08:19:50", "UserId": "456"},
                   {"Status": "Fail", "TimeStamp": "2019-03-12 08:19:50", "UserId": "789"}]

          let header: any = [];
               Object.keys(this.exam[0]).forEach(function (key) {
               header.push(key)
               });
         this.tableColumns.push({ "headerName": header, "field": header });
         this.gridOptions.api.setColumnDefs(this.tableColumns);
         this.gridOptions.rowData = this.exam;
         this.gridOptions.api.setRowData(this.rowData);
  }

Я приложил свой выводной снимок экрана с заголовками. он идет в одном месте с символом «,» и строками, показывающими «нет строк для отображения».

1 Ответ

1 голос
/ 27 апреля 2020

Ваш заголовок является массивом. И вы присваиваете весь массив tableColumns
Вместо этого вы должны сделать что-то вроде этого -

  let headers: any = [];
       Object.keys(this.exam[0]).forEach(function (key) {
       header.push(key)
       });


 //iterate through headers array, construct colDef and push to tableColumns
headers.forEach((header) => {
     this.tableColumns.push({ "headerName": header, "field": header });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...