2016-06-14 8 views
0

Ich habe eine Tabelle mit dem Namen Job:in Winkel ui-Raster von bestimmten Spalt sortieren andere als Standardwert Feld

name nvarchar(50) 
id int 
description nvarchar(50) 
enabled bit 
date_modified datetime 
user nvarchar(50) 

und die spezifische Klasse:

public class Job { 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public string Description { get; set; } 
    public bool Enabled { get; set; } 
    public DateTime DateModified { get; set; } 
    public string User { get; set; } 
} 

I Winkel verwenden und Typoskript auf Meine App und ich habe das folgende Problem beim Versuch, Daten anzuzeigen:

Ich benutze die UI-Gitter aus eckigen Typ von Gitter und ich habe die folgende Spalte defs:

Mein Problem ist, dass ich die Feldeigenschaftswert als die Datenbankspalte (date_modified) verwenden muss, um die Datum ändern Spalte zu sortieren, aber um Daten anzuzeigen, muss ich die Klasseneigenschaft (dateModified) verwenden. Gibt es eine Möglichkeit, die Spalte defs oder etwas zu erweitern, um die Spalte anzugeben, nach der ich sortieren möchte? Ich verwende derzeit einen Workaround mit Celltemplate, aber ich mag es nicht.

Antwort

1

Ja, Sie die sortingAlgorithm Eigenschaft in der columnDef angeben ...

{ field: 'DateModified', type: 'date', enableFiltering: false, sort: null, cellTemplate: '<div>{{row.entity.DateModified | date:\'dd/MM/yyyy hh:mm:ss\'}}</div>', sortingAlgorithm: SomeCommonServiceOfYours.getDateSortingAlgorithm() }, 

Und dann den Algorithmus in einem Dienst festlegen (oder Ihren Umfang) wie diese

getDateSortingAlgorithm: function() { 
    return function (aDate, bDate) { 
     var dateDisplayFormat = 'dd/MM/yyyy hh:mm:ss'; 
     var aMoment = moment(aDate, dateDisplayFormat); 
     var bMoment = moment(bDate, dateDisplayFormat); 
     if (aMoment.isBefore(bMoment)) { 
      return -1; 
     } else if (bMoment.isBefore(aMoment)) { 
      return 1; 
     } else { 
      return 0; 
     } 
    } 
}, 

Dies Sie übernimmt Verwenden Sie Moment, ein sehr schönes Paket für alle Datum und Uhrzeit-Handhabung, aber wenn nicht, können Sie diesen Algorithmus wie erforderlich anpassen.

+0

Ist es möglich, ohne den Sortieralgorithmus zu schreiben? Etwas wie '{field: 'date.label', defaultFilter: FilterOperator.LIKE, sort: 'date.value; } '? –

+0

Ich bin mir nicht sicher. Ich benutze angular-ui-grid nicht mehr, da es zu viele Bugs und Performance-Probleme für meine speziellen Anforderungen gab. –