我有一个数据表,其中有四列,如下所示:
DataTable Quarters = new DataTable();
Quarters.Columns.Add("QuarterId", typeof(int));
Quarters.Columns.Add("Quarter");
Quarters.Columns.Add("StartDate", typeof(DateTime));
Quarters.Columns.Add("EndDate", typeof(DateTime));
使用代码填充数据后,我想按照DateTime
类型的开始日期字段对数据表行进行排序。
为此,我编写了以下代码行:
Quarters.DefaultView.Sort = "StartDate";
但是在得到数据之后我得不到合适的输出。日期被视为字符串。
排序数据后我的输出如下(下面的图像是监视窗口而不是我的网格):
如何正确排序记录?
答案 0 :(得分:1)
你是对的。我对另一个问题感到困惑。
执行此工作人员创建一个新的类CustomDateClass,它实现IComparable接口并具有属性DateProperty typeof(DateTime)
然后重写CompareTo方法以比较DateTimePromerty。
public int CompareTo(object obj)
{
if (obj is CustomDateClass)
{
DateTime dt = ((CustomDateClass)obj).DateProperty;
return dt.CompareTo(DateProperty);
}
throw new ArgumentException("not CustomDateClass");
}
对于您的DataTable更改DateLine:
Quarters.Columns.Add("EndDate", typeof(CustomDateClass));
答案 1 :(得分:0)
我会向你展示不同的(我认为合适的)方式。 首先,让我们为这些数据创建一个类:
public class classNameGoesHere
{
public int QuarterId { get; set; }
public string Quarter{ get; set; }
public DateTime StartDate{ get; set; }
public DateTime EndDate{ get; set; }
}
现在,在你的班级中负责处理这些数据 - 让我们来处理这个问题。
首先创建一个数据类列表。
List<classNameGoesHere> listName = new List<classNameGoesHere>();
现在,让我们使用简单的LinQ查询填充此列表。
listName = from x in Quarters.AsEnumerable()
order by x.StartDate descending // sorting is beeing done here
select new classNameGoesHere
{
QuarterId = x.field<int>("QuarterId"),
Quarter = x.field<string>("Quarter"),
StartDate = x.field<DateTime>("StartDate"),
EndDate = x.field<DateTime>("EndDate")
};
现在,您可以将此绑定到DataGrid.ItemsSource。 实际上,如果可能的话 - 没有任何DataTable这样做会更好。而不是puplating DataTable - 在我显示你的列表中填充你的数据。(可能只是一点点重构代码)。 我希望它会有所帮助。