【发布时间】:2021-02-14 03:28:06
【问题描述】:
我正在学习 C#,以帮助我完成作为 RPA 开发人员的日常工作。因此,我创建了一个带有 DateTime 类型列的数据表,并且我试图将表排序为升序日期,因为我最终想要提取表中具有以“E”开头的“收据编号”的条目最新日期。
这是我的代码 DataTable Receipts = new DataTable();
Receipts.Clear();
Receipts.Columns.Add("Date", typeof(DateTime));
Receipts.DefaultView.Sort = "Date ";
Receipts.Columns.Add("Receipt Data", typeof(string));
DataRow dr = Receipts.NewRow();
dr[0] = "10 January 2021";
dr[1] = "Receipt number is E1039742083";
Receipts.Rows.Add(dr);
dr = Receipts.NewRow();
dr[0] = "11 January 2021";
dr[1] = "Receipt number is not found";
Receipts.Rows.Add(dr);
dr = Receipts.NewRow();
dr[0] = "11 January 2021";
dr[1] = "Receipt number is F1039742083";
Receipts.Rows.Add(dr);
dr = Receipts.NewRow();
dr[0] = "12 January 2021";
dr[1] = "Receipt number is E1039742083";
Receipts.Rows.Add(dr);
dr = Receipts.NewRow();
dr[0] = "12 January 2021";
dr[1] = "Receipt number is not found";
Receipts.Rows.Add(dr);
Receipts.DefaultView.Sort = "Date ASC";
foreach (DataRow datarow in Receipts.Rows)
{
foreach (var item in datarow.ItemArray)
Console.WriteLine(item);
} }
但这行似乎不起作用 Receipts.DefaultView.Sort = "Date ASC";当它在 Visual Studio 中运行时,它总是先运行最旧的日期
任何建议将不胜感激
谢谢
约旦
【问题讨论】:
-
你试过了吗.Sort = “Date”
-
我会创建一个额外的列来存储“E”报告的含义——即使该列是隐藏的——因为该关键元素只是较长字符串的一部分,甚至在开始时也没有的字符串。此外,
"10 January 2021"是一个字符串,而不是日期 - 为了确保数据符合预期,我会为数据列创建日期。使用单元格/列格式化功能来格式化显示 -
将 DateTime 对象添加到行中:例如,
receipts.Rows.Add(new DateTime(2021, 1, 10), "Receipt number is E1039742083");(顺便说一句,您不需要所有这些DataRow dr = Receipts.NewRow();等)。然后,DefaultView 决定数据如何呈现,DataTable 本身不受影响。如果将 DataTable 设置为某个 Control 的 DataSource,则数据将按顺序呈现。请注意,您正在设置Date ASC,它将首先显示较旧的日期。将DESC设置为按较新日期排序(最近的日期在前)。 -
感谢您的回答,我的“C#”同事今天将帮助我完成它们,但从现在看来它们是有意义的,我期待尝试它们