2013-11-25 5 views
3

I가 내가 날짜 이름으로이 테이블 정렬 및 모든 이름 정렬 할 필요가 DataTable여러 열을 기반으로 DataTable을 정렬하는 방법은 무엇입니까?

Name Date 
bbb 01/01/2011 
bbb 01/01/2012 
aaa 01/01/2010 
aaa 01/01/2011 
bbb 01/01/2013 
aaa 01/01/2012 
bbb 01/01/2010 
ccc 01/01/2010 
aaa 01/01/2013 
ccc 01/01/2012 
ccc 01/01/2011 

:

Name Date 
aaa 01/01/2010 
aaa 01/01/2011 
aaa 01/01/2012 
aaa 01/01/2013 
bbb 01/01/2010 
bbb 01/01/2011 
bbb 01/01/2012 
bbb 01/01/2013 
ccc 01/01/2010 
ccc 01/01/2011 
ccc 01/01/2012 

어떻게 C#에서 DataTable을 정렬 할 수 있습니까?

DataView dv = dt.DefaultView; 
    dv.Sort = "col1 desc"; 
    DataTable sortedDT = dv.ToTable(); 

하지만 이런 종류의 단지 1 열을 기준으로 ...

+0

이 한 번 봐 걸릴 수 있습니다 : http://stackoverflow.com/q/2777765/945456 –

답변

2

당신은 DataSet에 LINQ를 사용할 수 있습니다

var sortedDT = dt.AsEnumerable() 
       .OrderBy(r => r.Field<string>("Name")) 
       .ThenBy(r => r.Field<DateTime>("Date")) 
       .CopyToDataTable(); 

사용 CopyToDataTable 방법을 만들 :

나는 다음과 같은 것이 시도했습니다 정렬 된 행에서 새 DataTable.

+1

감사합니다,하지만 혼수 상태가 훨씬 쉬워 = 것)을 @Bryuk는 동의 – Bryuk

+1

이 특별한 경우 DataView를 사용하면 문자열 기반 정렬이 더 단순 해 보입니다. 나중에 더 복잡한 정렬이 필요할 경우 [Sorting with DataView] (http://msdn.microsoft.com/en-us/library/bb669083(v=vs.110).aspx) 문서 –

2

당신은 Linq-To-DataSet을 사용할 수 있습니다 명확히하려면 : Date 열이 먼저 DateTime에 구문 분석 할 필요가 문자열 열이 실제로

var orderedRows = from row in dt.AsEnumerable() 
        orderby row.Field<string>("Name"), row.Field<DateTime>("Date") 
        select row; 
DataTable tblOrdered = orderedRows.CopyToDataTable(); 

합니다.

가정 유효한 형식 :

var orderedRows = from row in dt.AsEnumerable() 
        let date = DateTime.Parse(row.Field<string>("Date"), CultureInfo.InvariantCulture) 
        orderby row.Field<string>("Name"), date 
        select row; 
관련 문제