2016-01-21 2 views
2

Je veux supprimer des colonnes indésirables d'un datatable et d'organiser l'ordre des colonnes dans l'ordre prédéfinicolonnes remove DataTable et réordonner les colonnes

Par exemple, mes colonnes de table sont comme ci-dessous,

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

Je veux supprimer test, et un nom Test1 col et réordonner par datatable en dessous le format

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); 
    } 
} 

maintenant, comment puis-je réorganiser les colonnes dans l'ordre ci-dessous? J'ai essayé comme dans le code ci-dessous, mais il échoue si tous les éléments de tableColumns n'existe pas dans datatable. nom de la colonne de la table de données aussi une fois un espace vide a (ex « Col1 »)

foreach (var col in tableColumns) 
{ 

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

} 

Quelle est la meilleure façon de supprimer des colonnes non désirées et réarranger les colonnes?

Répondre

3

Après avoir supprimé les colonnes indésirables, voici comment vous pouvez les commander:

int index = 0; 

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

Ceci permet de sélectionner les colonnes du DataTable, et les commandes de leur index correspondant dans la liste tableColumns.

Ensuite, il invoque SetOrdinal sur chacun d'entre eux, en incrémentant l'index à chaque fois.

+0

Ça marche pour moi, merci beaucoup! – blue

+0

Vous êtes les bienvenus –

0

Je pense que vos colonnes peuvent avoir un ordre aléatoire comme Col2, Col1, Col3. Et vous voulez réorganiser et supprimer les colonnes indésirables, comme 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);   
    } 
} 

Ceci supprimera les colonnes telles que Test, Test1, certains noms de colonnes, par exemple. colonnes qui n'ont pas le mot "Col" (changer la logique en fonction de votre programme). Ensuite, en utilisant regex, il extraira les nombres des noms de colonnes. soit 1 à partir de "Col1", puis réorganiser les colonnes en fonction de celui-ci.