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,但在尝试显示数据时遇到以下问题:

我使用角度类型的网格中的 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 回答