2016-01-21 30 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”,然后根据它重新排列列。