2016-01-02 4 views
5

Ich bin technology.I'm mit ag-Raster AngularJS und Spalte angezeigt werden soll dynamischWie Spalte angezeigt werden dynamisch mit ag-grid


meine Json Daten:

[{Date:'12-12-2015',Name:'ammu',mark:20},{Date:'12-12-2015',Name:'appu',mark:24},{Date:'12-12-2015',Name:'anu',mark:27},{Date:'13-12-2016',Name:'ammu',mark:23},{Date:'13-12-2015',Name:'anu',mark:20}] 

Mein Erwarteter Ausgang ist Expected Output

wird vorhandenen Code unten

$scope.gridOptions = { 
    columnDefs: [], 
    enableFilter: true, 
    rowData: [], 
    rowSelection: 'multiple', 
    rowDeselection: true 
}; 
$scope.customColumns = []; 
Getdetails(); 
function Getdetails() 
{ 
    masterdataFactory.Getdetails() 
    .success(function (Student) { 
     f (Student.length != 0) { 
      for(var i=0;i<Student.length;i++) { 
       $scope.customColumns.push(
        { 
         headerName: Student[i].Name, 
         field: "Mark", 
         headerClass: 'grid-halign-left' 

        } 
       ); 
      }; 
      $scope.gridOptions.columnDefs = $scope.customColumns; 
      $scope.gridOptions.rowData = Student; 
      $scope.gridOptions.api.setColumnDefs(); 
      }     
    }) 
     .error(function (error) { 
      $scope.status = 'Unable to load data: ' + error.message; 
     }); 
} 

Bestehende Ausgabe wird unter gegeben Existing Output

Wie meine erwarteten Ausgabe der vorhandenen Ausgabe erreicht

Antwort

4

Zuerst ordnen Sie die JSON-Daten

[{Date:'12-12-2015',ammu:20,appu:24,anu:27},{Date:'13-12-2016' ammu:23,anu:20}] 

für diesen Zweck Ich verwende folgenden Code

   function generateChartData() { 
      var chartData = [], 
       categories = {}; 
      debugger; 
      for (var i = 0; i <Student.length; i++) { 
       var newdate = Student[ i ].Date; 
       var Name=Student[ i ].Name; 
       var Mark=Student[ i ].Mark; 
       // add new data point 
       if (categories[ newdate ] === undefined) { 
        categories[ newdate ] = { 
         DATE: newdate 
        }; 
        chartData.push(categories[ newdate ]); 
       } 

       // add value to existing data point 

       categories[ newdate ][ Name] = Mark; 
      } 

      return chartData; 
     } 

Gitter Option ist unten angegeben:

$scope.gridOptions = { 
      columnDefs: coldef(), 
      enableFilter: true, 
      rowData: [], 
      rowSelection: 'multiple', 
      rowDeselection: true, 
      enableColResize: true, 

      } 
      }; 
     $scope.gridOptions.columnDefs = $scope.customColumns; 
     $scope.gridOptions.rowData =generateChartData(); 
     $scope.gridOptions.rowData = generateChartData(); 
} 

Spaltendefinition ist dynamisch die ist unter

angegeben
function coldef() 
{ 
    for(var i=0;i<headers.length;i++) { 
     debugger; 
     $scope.customColumns.push(
           { 
            headerName: headers[i], 
            field:headers[i], 
            headerClass: 'grid-halign-left', 
            width:180, 
            filter: 'set', 
          }); 
     } } 

In diesem Header ist ein Array. Dieses Array enthält verschiedene Schülernamen

var headers=new Array(); 
headers[0]="DATE"; 
var Names= Student.map(function (item) { return item.Name}); 
Names= Names.filter(function (v, i) { return Names.indexOf(v) == i; }); 
     for(var i=1;i<=Names.length;i++) 
     { 
      headers[i]=Names[i-1]; 
     } 
0

Ich denke, Dateneingabedaten (Student) können die Ursache sein, als Klammer scheinen werden weirdly gepaart (Ihre Daten kopiert, aber leichter lesen formatiert):

[ 
    {Date:'12-12-2015',Name:'ammu',mark:20}, 
    Date:'12-12-2015',Name:'appu',mark:24}, 
    Date:'12-12-2015',Name:'anu',mark:27}, 
    Date:'13-12-2016',Name:'ammu',mark:23}, 
    {Date:'13-12-2015',Name:'anu',mark:20} 
] 

Die zweite, dritte ein nd vierte Zeile haben keinen Anfang {.

+0

Entschuldigung. Es ist meine Schuld, das Format von Json ist falsch. Ich habe meine JSON-Daten aktualisiert. Aber eigentlich ist es nicht das Problem. Können Sie mir bitte mit einer Lösung helfen? –

2

Es scheint, dass Sie einen asynchronen Aufruf verwenden, um Ihre Daten zu erhalten, wenn der Aufruf erfolgreich ist, wird das Raster bereits initialisiert.

Nachdem das Gitter initialiazed Sie das Raster API (gridOptions.api ...) anstelle von girdOptions.columnsDef verwenden müssen (siehe http://www.ag-grid.com/angular-grid-api/index.php)

+0

Danke Sebastien.i versuchte so.aber das Ergebnis war das gleiche mit TypeError: "Kann nicht lesen Eigenschaft 'SetColumnDefs' von undefined" .Ich habe nicht meine erwartete Ausgabe.Können Sie mir bitte mit einer Lösung helfen? .Meine Frage wird mit Grid-API aktualisiert –

+0

Grundsätzlich sollten Sie 'gridOptions.columnDefs = [...]' verwenden, wenn das Grid noch nicht initialisiert ist und 'gridOptions.api.setColumnDefs ([...])' 'nachdem das Grid initialisiert wurde. Angesichts Ihres Fehlers denke ich, dass das Gitter noch nicht initialisiert ist und gridOptions.api ist immer noch undefiniert, wenn Sie versuchen, gridOptions.api.setColumnDefs (...) aufzurufen. – Sebastien

+0

Danke Sebastien.Ich habe die Antwort –

2

Es gibt durchaus einige Dinge Unrecht in Ihrem Code:

1.: Das Feld 'API' ist beim Start nicht verfügbar. Es kann bedeutet zwei Dinge:

  1. das Gitter noch nicht (wickeln Sie den Anruf in einem $ Timeout oder Ereignis ready Check-Dokumentation auf http://www.ag-grid.com) geladen.
  2. Sie vergessen die ag-grid-Direktive in Ihrem DOM-Element, so dass das Gitter überhaupt nicht initialisiert wird.

2.: nicht $ scope.gridOptions.api.setColumnDefs(); aber $ scope.gridOptions.api.setColumnDefs (myNewColumnsDefs);

3: Wenn das Grid bereits initialisiert ist, verwenden Sie nicht rowData verwenden Sie api.setRowData (myDatas), wahrscheinlich besser nach dem Aufruf von setColumnDefs verwenden, aber ich glaube nicht, dass es nichts vermasseln wird.

+0

Vielen Dank Walfrat –

+0

Kein Problem, vergessen Sie nicht, die Antwort zu validieren, damit die Leute wissen, dass dieser Beitrag beantwortet wurde – Walfrat

0
$scope.gridOptions ={ 
     enableSorting: true, 
     enableFilter: true, 
     suppressMovableColumns:true, 
     enableColResize: true, 
     columnDefs : [], 
     rowHeight : 27, 
     tooltipField : true, 
     suppressLoadingOverlay : true, 
     overlayLoadingTemplate: '<span class="ag-overlay-loading-center" style=background:lightgoldenrodyellow>Please wait while your rows are loading</span>', 
     //getRowStyle : getRowStyleScheduled 
    };  

    $scope.gridRefresh = function() { 
$scope.columnsHeaders =[]; 
     for (var i = 0, len = $scope.columnsHeaders.length; i < len; i++) { 
      $scope.columnsHeaders[i].headerName = $scope.columnsHeaders[i].name; 
      $scope.columnsHeaders[i].field = $scope.columnsHeaders[i].field; 
      $scope.columnsHeaders[i].cellRenderer = function(params) { 
       if(params.value != null) { 
        return '<span title="'+params.value+'">'+params.value+'</span>'; 
       }else { 
        return null; 
       } 
      } 
     $scope.gridOptions.columnDefs.push($scope.columnsHeaders[i]); 
     } 
     $scope.gridOptions.api.setColumnDefs($scope.gridOptions.columnDefs); 
     $scope.gridOptions.api.setRowData($scope.Rows); 
     $scope.gridOptions.columnApi.autoSizeColumns($scope.gridOptions.columnDefs); 
    } 
+0

Bitte geben Sie eine kleine Erklärung Ihres Codes – StephenTG

2
// the api will not be available unless it is compiled with the **$timeout** or **setTimeout** because this javascript library does not fall in angular digest cycle 
$timeout(function() { 
    $scope.gridOptions.api.setColumnDefs(masterColumnDefs); 
}, 0); 

Dies wird Ihnen helfen, die API von ag-Grid zuzugreifen.

Hoffe, das hilft!