按DateTime

时间:2015-11-10 18:18:09

标签: sorting datagridview

我有一个使用C#在asp.net编写的网站。 grdStatus是System.Windows.Forms.DataGridView的一个实例。它显示2列 - StatusDate和Status。 StatusDate包含DateTime值。状态包含字符串。问题是当网格在StatusDate上排序时,它不会将值排序为DateTimes。老实说,我不太确定它是如何排序的。当我单击Status Date列标题时,它会按如下方式对日期进行排序:

Status Date
9/24/2014 10:01:06 AM
9/24/2014 10:00:58 AM
9/23/2014 7:27:23 PM
9/1/2015 4:48:35 PM
10/22/2014 12:15:38 PM
10/22/2014 12:15:29 PM
10/22/2014 12:12:52 PM
10/22/2014 12:12:27 PM

当然不是按DateTime对它们进行排序,但它似乎也不按字母顺序对它们进行排序。这是刷新网格的方法。我添加了由>表示的两行。试图强制它按DateTime对行进行排序,但它们似乎没有效果。

private void RefreshGrid()
{
    IEnumerable<OrderService.OrderDetailStatus> statusItems = services.OrderSvc.GetStatusHistoryForOrderDetail(OrderDetailId);
    IEnumerable<ViewModels.StatusHistoryGridViewModel> gridItems = AutoMapper.Mapper.Map<IEnumerable<ViewModels.StatusHistoryGridViewModel>>(statusItems);
    grdStatus.AutoGenerateColumns = false;
    grdStatus.DataSource = gridItems.ToDataTable<ViewModels.StatusHistoryGridViewModel>();
--->grdStatus.Columns[0].ValueType = typeof(DateTime);
--->grdStatus.Sort(grdStatus.Columns[0], ListSortDirection.Ascending);
}

这是用作网格数据源的视图模型。如您所见,CreatedDate(映射到StatusDate)是DateTime成员。

namespace IVGOffice.ViewModels
{
    public class StatusHistoryGridViewModel
    {
        public string StatusName { get; set; }
        public DateTime CreatedDate { get; set; }
    }
}

我看了一些与此相关的其他帖子,但我没有发现任何有用的信息。任何人都可以向我解释如何正确排序吗?

1 个答案:

答案 0 :(得分:0)

部分问题在于我忽略了其中一个日期与其他日期不同的事实。在我注意到之后,我能够让控件按日期对列进行排序;但是,我仍无法按日期和时间对其进行排序。我认为这可能是DateGridView控件中的一个错误。我用Infragistics的UltraGrid控件代替它,并且工作正常。