0

Jobという名前のテーブルがあります:

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

そして特定のクラス:

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; }
}

アプリで angular と typescript を使用していますが、データを表示しようとすると次の問題が発生します。

angularタイプのグリッドのui-gridを使用し、次の列定義を持っています:

    columnDefs: [
        {
            field: 'id',
            defaultFilter: FilterOperator.EQU,
            sort: {

                direction: this.uiGridConstants.DESC,
                priority: 0,
            },
            type: 'number'
        },
        { field: 'name', defaultFilter: FilterOperator.LIKE, sort: null },
        { field: 'description', defaultFilter: FilterOperator.LIKE, sort: null },
        { field: 'enabled', filter: { type: 'select', selectOptions: [{ value: true, label: 'True' }, { value: false, label: 'False' }] } },
        { field: 'user', defaultFilter: FilterOperator.LIKE, sort: null },
        { field: 'date_modified', type: 'date', enableFiltering: false, sort: null, cellTemplate: '<div>{{row.entity.dateModified | date:\'dd/MM/yyyy hh:mm:ss\'}}</div>' },
        { field: 'action', enableFiltering: false, enableSorting: false, sort: null, cellTemplate: `${this.baseUrl}app/automaticAction/listActionsTemplate.html` }
    ]

私の問題は、日付変更列を並べ替えるには、フィールド プロパティ値をデータベース列 (date_modified) にする必要がありますが、データを表示するには、クラス プロパティ (dateModified) を使用する必要があることです。列定義を拡張する方法や、並べ替えたい列を指定する方法はありますか? 現在、celltemplate で回避策を使用していますが、気に入りません。

4

1 に答える 1

1

はい、columnDef で sortingAlgorithm プロパティを指定できます...

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

そして、このようにサービス(またはスコープ)でアルゴリズムを指定します

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;
        }
     }
},

これは、すべての日付と時刻の処理に非常に優れたパッケージである moment を使用していることを前提としていますが、そうでない場合は、必要に応じてそのアルゴリズムを適応させることができます。

于 2016-06-28T21:55:40.517 に答える