2016-03-03 16 views
6

Ho una semplice griglia UI con queste opzioni:Come nascondere determinate righe in una griglia utente in base ai relativi valori?

$scope.transactionGrid = { 
    enableSorting : true, 
    enableColumnResize : true, 
    enableScrollbars : true, 
    enablePaginationControls : false, 
    minRowsToShow : 6, 
    onRegisterApi : function(gridApi) { 
     $scope.gridEventsApi = gridApi; 
    } 
}; 

voglio nascondere le righe che hanno un valore specifico, deleted: "y".

$scope.transactionGrid.data = [ 
    { Name: "First", deleted: "y" }, 
    { Name: "Second", deleted: "y" }, 
    { Name: "Third", deleted: "n" }, 
    { Name: "Fourth", deleted: "n" } 
]; 

Senza effettivamente modificare i dati, può essere filtrato dalle righe?

risposta

5

Un modo è quello di regolare il modello di ripetitore di riga per verificare la presenza di un valore specifico per riga e visualizzare/nascondere la riga in questo modo. Ho creato a Plunkr mostrando una possibile soluzione.

In primo luogo è necessario creare la riga-valore-checker-funzione:

appScopeProvider: { 
    showRow: function(row) { 
    return row.deleted !== 'y'; 
    } 
}, 

Poi regolare il loro modello aggiungendo che il check della fila in-ripetitore

$templateCache.put('ui-grid/uiGridViewport', 
    ... 
    ng-if=\"grid.appScope.showRow(row.entity)\" 
    ... 
} 
+0

così succede che ho anche un CellTemplate dove mi trovo usando appscope, quindi dopo aver aggiunto il codice suggerito, questo metodo EditTransaction() non viene chiamato \t \t \t \t "cellTemplate": "

" –

+0

hey, ho aggiunto un modello di cella con ng-clic in questo plunkr http://plnkr.co/edit/AeuT6GqvuoXDDjFpYnWq?p=preview e funziona. puoi fornire maggiori informazioni o creare un plunkr non funzionante? – CMR

1

È possibile nasconderlo creando modelli di celle e nascondendole in base al valore di riga per ogni campo:

$scope.transactionGrid = { 
    enableSorting : true, 
    enableColumnResize : true, 
    enableScrollbars : true, 
    enablePaginationControls : false, 
    minRowsToShow : 6, 
    onRegisterApi : function(gridApi) { 
     $scope.gridEventsApi = gridApi; 
    } 

    // Column template definitions: 
    columnDefs: [ 
     { 
      name: 'Name', 
      displayName: 'Name', 
      cellTemplate : '<div ng-if="row.entity.deleted">{{row.entity.Name}}</div>' 
     } 
    ] 
}; 

Ho fatto un Plunk a dimostrare una valida tecnica per risolvere questo: https://plnkr.co/edit/XQRC45vaiZCySZYkEGrz?p=preview

+0

Sebbene questo collegamento possa rispondere alla domanda, è meglio includere qui le parti essenziali della risposta e fornire il link per riferimento. Le risposte di solo collegamento possono diventare non valide se la pagina collegata cambia. - [Dalla recensione] (/ recensione/post di bassa qualità/18051278) – Korcholis

0

So che hai detto esplicitamente "senza effettivamente modificare i dati", ma assegnare un set di dati filtrato alla griglia non cambierebbe il set di dati, solo i dati per la griglia. Potrebbe anche essere una soluzione valida e valida per altri casi come questo.

ho biforcuta CMR s' Plunk per dimostrare questo: http://plnkr.co/edit/NntwWb?p=preview

La parte fondamentale è solo l'aggiunta di un filter quando si assegna il set di dati:

$scope.gridOptions = { 
    data: $scope.myData.filter(function(row) { 
     return row.deleted !== "y"; 
    }) 
};