2011-08-11 49 views
3

我在数据排序的

12的格式包括数据2011年2011年8月11日九月

我用下面的代码做一个数组列表排序:

Array.Sort(fileNames, delegate(string first, string second) 
{ 

    return DateTime.Compare(Convert.ToDateTime(first), Convert.ToDateTime(second)); 
}); 

结果我从上面的代码得到的是

11 2011年9月2011

8月12日之后的排序

+1

这可以在.NET 4/LINQPad中正常工作 - 我在Windows 7(不是电话)和英语区域设置(区域设置问题)。可能希望列出由Convert生成的DateTime,它们可能不如预期。 ('Convert.ToDateTime(string)'很难“正常工作”,这可能不是所期望的“工作”结果。) – 2011-08-11 01:26:35

回答

2

你说你的数据是 “字符串数组列表” - 你的意思

List<string> 

string[] 

它使你在执行代码的方式上有所不同。假设你有一个实际的阵列,那么代码是非常简单的,尽管不是那样干净,我们想:

private void SortButton_Click(object sender, RoutedEventArgs e) 
{ 
    ItemsListBox.ItemsSource = null; 
    Array.Sort(items, delegate(string first, string second) 
    { 
     return DateTime.Compare(Convert.ToDateTime(first), Convert.ToDateTime(second)); 
    }); 
    ItemsListBox.ItemsSource = items; 
} 

但是,如果你正在处理一个列表<字符串>所谓的“项目”,那么这种方法本身不会起作用。你必须兼顾周围的一些东西,要做到这一点:

private void SortButton_Click(object sender, RoutedEventArgs e) 
{ 
    ItemsListBox.ItemsSource = null; 
    var arrayOfItems = items.ToArray<string>(); 
    Array.Sort(arrayOfItems, delegate(string first, string second) 
    { 
     return DateTime.Compare(Convert.ToDateTime(first), Convert.ToDateTime(second)); 
    }); 
    items = new List<string>(arrayOfItems); 
    ItemsListBox.ItemsSource = items; 
} 

类似,但不同的:)由于排序中所发生的,它实际上只是排序的阵列,而不是实际列表<串>我们是使用。

现在注意清理ItemsSource之前和之后的重置。我玩了一下,但没有采取这两个步骤就无法正常工作。我认为这是数据绑定基础架构中的某个细节。我尝试使用一个字符串[],List和ObservableCollection,但每次都必须清除并重置ItemsSource以重新获取ListBox。

您对Convert.ToDateTime()的评论对我来说似乎没有问题。我也试过DateTime.Parse(),那也起作用。问题原来是在ListBox.ItemsSource的清除和重新分配。

有谁知道为什么ListBox的行为是这样吗?这是简单的我忘记了吗?