2014-06-13 2 views
0

데이터 테이블이 1 개 있습니다. 열 이름을 기반으로 모든 데이터 열 위치를 다시 원합니다.C#을 사용하여 열 이름별로 데이터 테이블 열을 재정렬하십시오.

가정하자 내가 가지고 내가 위에서 얻을 논리를 만들 수 SetOrdinal하지만를 사용하고 그것을

Click Click-past Impression Impression-past Cost cost-past 
    1   11  2    22   3  33 

같은 데이터를 얻을 지정된 열을 주문하는 방법 다음이

Click Impression Cost Click-past Impression-past cost-past 
    1   2   3  11   22    33 

같은 데이터 테이블 출력

+2

코드를 추가 할 수 있습니까? –

+0

편집에서 "이전"은 무엇입니까? 그것은 "이것과 같은 데이터 테이블"에는 존재하지 않습니다. 여기서 "정렬"의 논리는 무엇입니까? 'SetOrdinal' 그냥 잘 작동 ... –

답변

1

이렇게하려면 내장 된 기능이 없다고 생각합니다.

목록에 모든 열 이름을 넣고 정렬하고 모든 열을 새 테이블에 복사하면 올바른 순서로 열을 만들 수 있습니다.

SetOrdinal은 다른 모든 열의 인덱스이기 때문에 고통입니다.

게시물에 코드가 없으므로 코드를 입력하지 않았습니다.

+0

나는 주어진 논리를 사용하여 노력하고 있습니다 감사합니다 Logged – Shailesh

1

꽤하지 않습니다,하지만 작동 :

DataTable dt = new DataTable { 
    Columns = { 
     "Click", "Impression", "Cost", "Click-past", 
     "Impression-past", "cost-past" 
    } 
}; 
Dictionary<string, DataColumn> colByName = dt.Columns.OfType<DataColumn>() 
    .ToDictionary(x => x.ColumnName, StringComparer.InvariantCultureIgnoreCase); 
List<DataColumn> sorted = new List<DataColumn>(dt.Columns.Count); 
foreach (DataColumn col in dt.Columns) 
{ 
    if (!col.ColumnName.EndsWith("-past", 
     StringComparison.InvariantCultureIgnoreCase)) 
    { 
     sorted.Add(col); 
     DataColumn past; 
     if (colByName.TryGetValue(col.ColumnName + "-past", out past)) 
      sorted.Add(past); 
    } 
} 
int ordinal = 0; 
foreach(var col in sorted) 
{ 
    col.SetOrdinal(ordinal++); 
} 
foreach(DataColumn col in dt.Columns) 
    System.Console.WriteLine(col.ColumnName); 

주 어떤 불명 -past 열이 (비 과거 트윈없이)이 자동으로 원래 순서를 보존, 오른쪽으로 비켜 가게됩니다.

0
DataTable dt_reorder = ds1.Tables[i]; 

       //string[] columnNames = (from dc in dt_reorder.Columns.Cast<DataColumn>() select dc.ColumnName).OrderByDescending(c => c.Colum); 

       System.Collections.Generic.List<string> lstColNames = (from DataColumn col in dt_reorder.Columns select col.ColumnName).ToList(); 



       foreach (string value in lstColNames) 
       { 
        string aa = value.ToString(); 
        if (!aa.Contains("-past")) 
        { 
         if (lstColNames.Contains(aa + "-past")) 
         { 
          dt_reorder.Columns[aa + "-Previous"].SetOrdinal(dt_reorder.Columns.IndexOf(aa) + 1); 
         } 

        } 

       } 
관련 문제