2

Is there any easy way to sort listbox items by DateTime values? In my listbox1 I have items formatted like this: "2013.01.08 19:29:52" so it's just someDateTimeValue.ToString()

Soner Gönül
  • 97,193
  • 102
  • 206
  • 364
Quak
  • 6,923
  • 4
  • 18
  • 22
  • Did you tried anything so far? Please read [faq] and [ask] – Soner Gönül Jan 08 '13 at 18:35
  • 1
    possible duplicate of [Sorting a list of items in a list box](http://stackoverflow.com/questions/3667088/sorting-a-list-of-items-in-a-list-box) – Soner Gönül Jan 08 '13 at 18:44
  • I also marked it as duplicate, but with closer look, it is slightly different as it involves `DateTime` – Tilak Jan 08 '13 at 19:07
  • If your `DateTime` format is yyyy.MM.dd hh:mm:tt then default sorting(Array.Sort) will work. Otherwise you need to first parse it as DateTime, then do the sorting. – Tilak Jan 08 '13 at 19:09

3 Answers3

1

if you have 2 ListBoxes you could do something like the following

ArrayList arList = new ArrayList(); 
foreach (object obj in listBox1.Items)
{
    arList.Add(obj);
} 
arList.Sort(); 
listBox2.Items.Clear();
foreach(object obj in arList)
{
    listBox2.Items.Add(obj); 
}
MethodMan
  • 18,625
  • 6
  • 34
  • 52
  • Do you think it is ethical to copies someone's answer? http://stackoverflow.com/a/3667107/447156 – Soner Gönül Jan 08 '13 at 18:58
  • @Soner I think that you are assuming this is my answer I am not sure why you would come out and accuse someone of using an answer.. – MethodMan Jan 08 '13 at 18:59
  • I could add an even more complex answer but I think for the OP that would be over Kill.. – MethodMan Jan 08 '13 at 19:03
  • 4
    @DJKRAZE, I think you should read [is-it-okay-to-copy-paste-answers-from-other-questions](http://meta.stackexchange.com/questions/78658/is-it-okay-to-copy-paste-answers-from-other-questions). There is nothing wrong in copy as long as credit is going where it should go – Tilak Jan 08 '13 at 19:04
0

Try this

List<ListItem> myList = new List<ListItem>(ListBox1.Items.Cast<ListItem>());        
myList = myList.OrderByDescending(li => li.Value).ToList<ListItem>();
ListBox1.Items.Clear();
ListBox1.Items.AddRange(myList.ToArray<ListItem>());
arunlalam
  • 1,838
  • 2
  • 15
  • 23
  • 1
    Why convert the enumeration from `Cast` to a `List` when the only thing you're going to do with it is enumerate it with `OrderBy`? Why construct it with the constructor instead of `ToList` (which you do later)? Why do you convert the result of `OrderBy` into a `List` only to immediately convert it to an `Array`? Why are you supplying the generic parameters to `ToList` and `ToArray`? (They will be implied.) You can just use `var items = ListBox1.Items.Cast().OrderByDecending(li => li.Value).ToArray()` then clear/addRange. – Servy Jan 08 '13 at 19:18
  • @Servy Please would you either submit an answer or modify this one to correctly portray your thoughts? Thank you. – CaptainBli Aug 18 '14 at 21:24
-1

try to sort a list of dates and after that put in the listbox.

dateList.Sort();
var items = new SelectList(dateList);