2009-03-23 5 views
2

Comment puis-je supprimer une colonne d'un jeu de données?Comment puis-je supprimer une colonne d'un jeu de données?

Y at-il une méthode qui va le faire pour moi comme ceci:

rh.dsDetail = ds.Tables[0].Columns.Remove(

Ou peut-être comme ceci:

rh.dsDetail = ds.Tables[0].Columns.Remove(ds.Tables[0].Columns[1],ds.Tables[0].Columns[2]) 

Répondre

17

D'abord, un DataTable a colonnes, pas un ensemble de données saisies.

Si vous voulez vous débarrasser d'eux, alors:

table.Columns.Clear(); 

autrement, si vous avez l'index:

table.Columns.RemoveAt(0); 

devrait faire le travail si vous avez l'index de colonne. Notez que si vous supprimez la colonne 0, les numéros seront mélangés (vous devrez peut-être procéder dans l'ordre inverse).

Alternativement, vous pouvez supprimer par nom:

table.Columns.Remove("Foo"); 
2

Il n'y a pas cette méthode. Mais vous pouvez simplement écrire votre propre Helpermethod

public static void RemoveColumns(DataTable dt, params DataColumn[] dc) 
{ 
    foreach (DataColumn c in dc) 
    { 
     dt.Columns.Remove(c); 
    } 
} 

RemoveColumns(ds.Tables[0], ds.Tables[0].Columns[1], ds.Tables[0].Columns[2]); 
2

Il n'y a pas de méthode intégrée pour supprimer plus d'une colonne à la fois. Vous pouvez créer une méthode d'extension si vous le souhaitez. Quelque chose comme ceci:

public static class DataColumnCollectionExtensions 
    { 
     public static void RemoveColumns(this DataColumnCollection column, params string[] columns) 
     { 
      foreach (string c in columns) 
      { 
       column.Remove(c); 
      } 
     } 
    } 

Vous pouvez alors l'utiliser comme ceci:

DataTable table1 = ds.Tables[0]; 
table1.Columns.RemoveColumns("Column1","Column2","Column6"); 
+0

le meilleur moyen (o; –

3

Je l'ai fait avant dans les deux WinForms & apps web. Vous devez passer par le DataTable à l'envers, puis effectuer un AcceptChanges à la fin. Cet exemple particulier est typique, car il supprime tous les GUID (colonnes se terminant par "id").

private void RemoveUselessFields(ref DataTable dtResults) 
    { 
     for (int i = dtResults.Columns.Count - 1; i >= 0; i--) 
     { 
      DataColumn column = dtResults.Columns[i]; 
      if (column.ColumnName.Substring(column.ColumnName.Length - 2, 2).ToUpper() == "ID") 
      { 
       dtResults.Columns.Remove(column); 
      } 
     } 
     dtResults.AcceptChanges(); 

    } 
0

si jamais vous voulez supprimer les colonnes parce que vous avez un nouveau jeu de noms de colonnes, vous pouvez utiliser ceci:

DataSet.Reset(); 

Hope it helps.

Questions connexes