2009-06-26 6 views
4

시나리오 다음을 수행하는 방법 :정렬 DataTable의 행

1.rowa
2.rowab
3.row
4 : 일부 행 예를 들어이 들어 약간의 DataTable을 한 .rowaba
...
n. rowabba

행을 이름이 아닌 길이별로 정렬하는 방법. 나는 필드의 길이별로 표를 정렬하려고한다.

답변

11

당신은 할 열 값을 일으키는 원인이되는 len() 함수를 호출을 포함하는 식을 공급하여 DataTable에 여분의 열을 추가 할 수 있습니다를 자동 계산 :

table.Columns.Add("LengthOfName", typeof(int), "len(Name)"); 

그런 다음 당신은 단순히 종류의 UI 컨트롤의 어떤 종류의 그리드에 DataTable 바인딩하기 전에 새 열에서 사용하려는 수 : 동의 해요

table.DefaultView.Sort = "LengthOfName"; 
+0

"len (Name)"을 좋아합니다 - 얼마나 자주 DataTable을 사용하는지 보여줍니다. .. +1 –

+3

아주 좋아, DataTable에서 열을 계산할 수 있다는 것을 몰랐습니다. +1 –

+0

당신이 표현을 사용할 수 있다는 것을 알았지 만 나는 아직 알지 못했습니다. http://msdn.microsoft.com/en-us/library/system.data.datacolumn.expression%28VS.80%29.aspx – maxwellb

1

이어야하며 DataTable을 사용해야하는 경우 정렬을위한 추가 열을 도입 할 수 있습니다. - 두 클래스의 개인적

 DataTable table = new DataTable(); 
     DataColumn val = table.Columns.Add("Value", typeof(string)); 
     table.Rows.Add("abc"); 
     table.Rows.Add("defgh"); 
     table.Rows.Add("i"); 
     table.Rows.Add("jklm"); 
     // sort logic: ***** schou-rode's "len(...)" approach is better ***** 
     DataColumn sort = table.Columns.Add("Sort", typeof(int)); 
     foreach (DataRow row in table.Rows) { 
      row[sort] = ((string)row[val]).Length; 
     } 
     DataView view = new DataView(table); 
     view.Sort = "Sort"; 
     foreach (DataRowView row in view) { 
      Console.WriteLine(row.Row[val]); 
     } 

, 내가 입력 된 목록을 사용하십시오 :이 경우 새 열을 기준으로 정렬 단순히 원하는 각 셀의 길이로 열의 값을 설정하고, 수 또는이 경우 문자열 (당신은 단지 하나 개의 값 목록 이후) :

 List<string> list = new List<string> { 
      "abc", "defgh", "i", "jklm"}; 
     list.Sort((x, y) => x.Length.CompareTo(y.Length)); 
     foreach (string s in list) { 
      Console.WriteLine(s); 
     } 
+0

을, 가장 간단한 방법은 같은 필드를 추가입니다 LENGTH (필드) 또는 LENGTH (필드 1 || field2 || ... || fieldN)을 사용하여 데이터 집합 – Jonathan

+0

을 쿼리하십시오. 또는 실제로 열을 추가 할 수없는 경우 행을 반복자를 통해 목록으로 읽어옵니다. 목록을 정렬 한 다음 표를 지우고 다시 추가하십시오. 마크, 람다 표현에 감사드립니다. 나는 여전히 C# 2에 있고 Compare 메서드를 구현하는 테스트 클래스를 작성하고 있었다. 이런, 람다 표현은 확실히 많은 선을 구해줍니다 ... 와우. – maxwellb

+0

답장을 보내 주셔서 감사합니다. 입력 한 목록도 사용 하겠지만이 코드가 붙어있어 어제 일해야합니다. :) 입력 된 목록으로 변경하면 많은 코드를 변경해야합니다. – nemke