Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否按日期时间值而不是字符串值对列进行排序?_C#_Sorting_Listview - Fatal编程技术网

C# 是否按日期时间值而不是字符串值对列进行排序?

C# 是否按日期时间值而不是字符串值对列进行排序?,c#,sorting,listview,C#,Sorting,Listview,我正在使用它对列表视图进行排序: 它工作得很好,除了当我尝试对日期列排序时,它是在上午2点到晚上10点之后(因为2大于1) 这是我正在使用的代码: var lvcs = new ListViewColumnSorter(); ListView.ListViewItemSorter = lvcs; lvcs.Order = SortOrder.Ascending; lvcs.SortColumn = 1; //<-Contains DateTime values in string form

我正在使用它对列表视图进行排序: 它工作得很好,除了当我尝试对日期列排序时,它是在上午2点到晚上10点之后(因为2大于1)

这是我正在使用的代码:

var lvcs = new ListViewColumnSorter();
ListView.ListViewItemSorter = lvcs;
lvcs.Order = SortOrder.Ascending;
lvcs.SortColumn = 1; //<-Contains DateTime values in string format
ListView.Sort();
var lvcs=new ListViewColumnSorter();
ListView.ListViewItemSorter=lvcs;
lvcs.Order=SortOrder.升序;

lvcs.SortColumn=1// 您应该从listview获取项目,并将日期/时间字符串转换为DateTime对象,然后对这些对象调用sort(将它们放入集合中),然后将它们放回listview

希望这能解决您的问题。

请查看-中的“排序日期”部分,替换比较方法

示例代码:

try {
    DateTime dateX = Convert.ToDateTime(listviewX.SubItems[ColumnToSort].Text);
    DateTime dateY = Convert.ToDateTime(listviewY.SubItems[ColumnToSort].Text);
    compareResult = ObjectCompare.Compare(dateX, dateY);
}
catch {
    compareResult = ObjectCompare.Compare(listviewX.SubItems[ColumnToSort].Text, listviewY.SubItems[ColumnToSort].Text);
}

以上是正确的,因为您正在对列表进行字符串比较

尝试转换为DateTime并创建
列表
,然后对其进行排序


您可以使用
DateTime.TryParse
或ParseExact指定您自己的解析格式

此处标记为正确的答案对我没有帮助。我的应用程序似乎进入了抛出异常的无限循环。为了避免使用try/catch和catching抛出的例外,我使用了以下方法,并且效果非常好:

DateTime dateX;
DateTime dateY;
if (
    DateTime.TryParse(listviewX.SubItems[ColumnToSort].Text, out dateX)
    && DateTime.TryParse(listviewY.SubItems[ColumnToSort].Text, out dateY)
    )
{
    compareResult = ObjectCompare.Compare(dateX, dateY);
}
else
{
    compareResult = ObjectCompare.Compare(listviewX.SubItems[ColumnToSort].Text, listviewY.SubItems[ColumnToSort].Text);
}

您好,通过将它们“放回[my]listview”,这是否意味着列表将被清除并重新填充?无限循环的出现是因为异常是过程密集型的。你的解决方案更好。我做的另一种方法是添加一个名为SortType的新属性,并在比较中打开相应的类型解析字符串。
DateTime dateX;
DateTime dateY;
if (
    DateTime.TryParse(listviewX.SubItems[ColumnToSort].Text, out dateX)
    && DateTime.TryParse(listviewY.SubItems[ColumnToSort].Text, out dateY)
    )
{
    compareResult = ObjectCompare.Compare(dateX, dateY);
}
else
{
    compareResult = ObjectCompare.Compare(listviewX.SubItems[ColumnToSort].Text, listviewY.SubItems[ColumnToSort].Text);
}