2015-11-10 114 views
0

我有一个使用C#编写的asp.net网站。 grdStatus是System.Windows.Forms.DataGridView的一个实例。它显示2列 - 状态日期和状态。 StatusDate包含DateTime值。状态包含字符串。问题是当网格在StatusDate上排序时,它不会将值排序为DateTime。老实说,我不太清楚它是如何分类的。当我点击状态日期列标题,它按这样的日期:按日期时间排序DataGridView

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对行进行排序,但它们似乎没有效果。

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

我看了有关这一些其他的帖子,但我还没有发现任何帮助。任何人都可以向我解释如何得到这个排序正确吗?

回答

0

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