2016-01-21 52 views
2

我想從數據表中刪除不需要的列,並安排在預先定義的順序數據表刪除列和重新排序

例如,我的表列像下面的列的順序列,

Col2|Col1|Col3|Test|Test1|Col5|Col4|Some col name|Col6 

我想刪除測試,測試1和一些山坳名稱和數據表重新安排到下面的格式

Col1|Col2|Col3|Col4|Col5|Col6 

// I need the below columns 
List<string> tableColumns = new List<string>(); 
tableColumns.Add("Col1"); 
tableColumns.Add("Col2"); 
tableColumns.Add("Col3"); 
tableColumns.Add("Col4"); 
tableColumns.Add("Col5"); 
tableColumns.Add("Col6"); 

List<DataColumn> tblColumns = MyDataTable.Columns.Cast<DataColumn>().ToList(); 

//Remove unwanted columns 
foreach (DataColumn col in tblColumns) 
{ 
    if (!tableColumns.Contains(col.ColumnName.Trim())) 
    { 
    MyDataTable.Columns.Remove(col); 
    } 
} 

現在我該如何重新排序的列在下面的順序?

Col1|Col2|Col3|Col4|Col5|Col6 

我試圖像下面的代碼,但如果在數據表中不存在TableColumn來的所有項目失敗。 還有些時間的數據表的列名有一些空的空間(如「Col1中」)

foreach (var col in tableColumns) 
{ 

    MyDataTable.Columns[col].SetOrdinal(tableColumns.IndexOf(col)); 

} 

這是去除不需要的列和重新安排列的最佳方式?

回答

3

在刪除不需要的列,這裏是你如何命令他們:

int index = 0; 

foreach (var col in 
    MyDataTable.Columns 
    .Cast<DataColumn>() 
    .OrderBy(x => tableColumns.IndexOf(x.ColumnName)) 
    .ToList()) 
{ 
    col.SetOrdinal(index); 
    index ++; 
} 

這從DataTable選擇列,並通過在tableColumns名單及其對應的指數的訂單他們。

然後它在每一個上調用SetOrdinal,每次增加索引。

+0

它適合我,非常感謝! – blue

+0

不客氣 –

0

我認爲你的列可能有像Col2,Col1,Col3這樣的隨機順序。並且您想重新排列並刪除不需要的列,例如Col1,Col2,Col3。

string[] srr = new string[]{"Col2","Col1","Col3","Test","Test1","Col6","Col4","Some col name","Col5"}; 

DataTable MyDataTable = new DataTable(); 

foreach(string col in srr) 
{ 
    MyDataTable.Columns.Add(col);    
} 

List<string> arrayNames = (from DataColumn x in MyDataTable.Columns 
         select x.ColumnName).ToList(); 

foreach(var col in arrayNames) 
{ 
    if(!col.Contains("Col")) 
    { 
     MyDataTable.Columns.Remove(col);    
    } 
    else 
    { 
     int result = Convert.ToInt32(Regex.Match(col.ToString(), @"\d+$").Value); 
     MyDataTable.Columns[col].SetOrdinal(result-1);   
    } 
} 

這將刪除像測試,測試1,一些col名稱即ie列。沒有「Col」一詞的列(根據您的程序更改邏輯)。然後通過使用正則表達式,它會從列名稱中提取數字。即1從「Col1」,然後根據它重新排列列。