Co do sortowania to nie ma problemu. Dopisz sobie jakąś zmienną (np. listę intów) która będzie trzymała informację którą kolumnę sortować jako string lub liczbę i będziesz miał po kłopocie.
Ja używałem czegoś takiego:
public int Compare(object x, object y)
{
ListViewItem columnA = (ListViewItem)x;
ListViewItem columnB = (ListViewItem)y;
if(CurrentColumn==2 || CurrentColumn==3)
{
return
String.Compare(columnB.SubItems[CurrentColumn].Text, columnA.SubItems[CurrentColumn].Text);
}
uint c0_1 = 0;
uint c0_2 = 0;
if (columnA.SubItems[CurrentColumn].Text.Split('-').Length<3 && UInt32.TryParse(columnB.SubItems[CurrentColumn].Text.Split('-')[0], out c0_1) && UInt32.TryParse(columnA.SubItems[CurrentColumn].Text.Split('-')[0], out c0_2))
{
if (c0_1 > c0_2)
return 1;
if (c0_1 < c0_2)
return -1;
if (c0_1 == c0_2)
return 0;
}
else
{
return
String.Compare(columnB.SubItems[CurrentColumn].Text, columnA.SubItems[CurrentColumn].Text);
}
return 0;
}
Moja mała uwaga. Czasem lepiej zastanowić się nad DataGridView. Sortowanie miał byś załatwione od razu i nie musiał byś się za bardzo przejmować i modyfikować funkcji do sortowania. A przy dodawaniu/usuwaniu/modyfikowaniu elementów było by mniej problemów (ale to tylko taka moja uwaga)
Pozdrawiam