2013-02-17 3 views
2

나는 <string[]>의 목록을 가지고 있습니다.
추가 된 항목이
정렬 배열 목록

list.Add(new string[]{"1", "A", "333", "666", "16.02.2013 03:00"});
list.Add(new string[]{"2a", "A", "333", "666", "16.02.2013 03:00"});
list.Add(new string[]{"2", "A", "333", "666", "16.02.2013 03:00"});
list.Add(new string[]{"3a", "A", "333", "666", "16.02.2013 03:00"});
list.Add(new string[]{"3b", "A", "333", "666", "16.02.2013 03:00"});
list.Add(new string[]{"4", "A", "333", "666", "16.02.2013 03:00"});
list.Add(new string[]{"5", "A", "333", "666", "16.02.2013 03:00"});
list.Add(new string[]{"10", "A", "333", "666", "16.02.2013 03:00"});
list.Add(new string[]{"11", "A", "333", "666", "16.02.2013 03:00"});

과 같을 것이다 0

파일에서 데이터를 구문 분석하고 List에 추가 한 후 DataGridView에 모든 데이터를 표시해야하며 DataGridView에 모든 데이터를 추가 한 후 사용자가 열 머리글을 클릭하여 정렬 할 수있게하려고합니다. 의 내가 어떻게 분류 목록

1 A 333 666 16.02.2013 03:00 
2 A 333 666 16.02.2013 03:00 
2a A 333 666 16.02.2013 03:00 
3a A 333 666 16.02.2013 03:00 
3b A 333 666 16.02.2013 03:00 
4 A 333 666 16.02.2013 03:00 
5 A 333 666 16.02.2013 03:00 
10 A 333 666 16.02.2013 03:00 
11 A 333 666 16.02.2013 03:00 

:

문제는 사용자가 처음으로 열을 기준으로 행을 정렬 할 것입니다 경우이 것이

1 A 333 666 16.02.2013 03:00 
10 A 333 666 16.02.2013 03:00 
11 A 333 666 16.02.2013 03:00 
2 A 333 666 16.02.2013 03:00 
2a A 333 666 16.02.2013 03:00 
3a A 333 666 16.02.2013 03:00 
3b A 333 666 16.02.2013 03:00 
4 A 333 666 16.02.2013 03:00 
5 A 333 666 16.02.2013 03:00 

하지만 올바른 방법과 같이 분류 것입니다 자연 정렬을 사용하여 배열의 특정 인덱스로 문자열 배열을?
LINQ를 사용할 수 없습니다.

+2

어쩌면 사용자 정의 IComparer가 필요합니다. 여기에 논리를 입력하십시오. http://msdn.microsoft.com/en-us/library/w56d4y5z%28v=VS.80%29.aspx – Mate

+0

DataGridview 또는 List에 대한 사용자 지정 IComparer? – user1527484

+1

예. 그 목록 user1527484

답변

1

natural sort을 찾고 있습니다. manyimplementationsaround 웹이 있습니다. 나는 그 중 하나를 선택하여 프로젝트에 복사합니다.

이제 DataGridView에서 정렬하기 때문에 SortCompare 이벤트에 연결하고 사용자 지정 정렬을 수행해야합니다. 그러면 다음과 같이 보일 것입니다 :

private void dataGridView1_SortCompare(object sender, DataGridViewSortCompareEventArgs e) 
{ 
    // Since you want a natural sort in the first column 
    if (e.Column.Index == 0) 
    { 
     // Create an instance of your natural sort comparer here 
     IComparer<string> comparer = new YourNaturalComparer() 

     // Perform the sort 
     e.SortResult = comparer.Compare(
      e.CellValue1.ToString(), e.CellValue2.ToString()); 

     // Signal that we handled the sorting for this column 
     e.Handled = true; 
    } 
} 
+0

ok는 내일 이것을 점검 할 것이다 – user1527484

+0

예, 이것은 내가 필요로하는 것이다. 내가 기대했던 것보다 쉽다. – user1527484