2008-09-16 11 views
82

J'ai un DataSet dans lequel je reçois un DataTable à partir duquel je suis passé d'un appel de fonction. Il a 15-20 colonnes, mais je ne veux que 10 colonnes de données.Supprimer des colonnes de DataTable en C#

Existe-t-il un moyen de supprimer ces colonnes que je ne veux pas, copier le DataTable à un autre qui a seulement les colonnes définies que je veux ou est-il juste mieux itérer la collection et utiliser simplement les colonnes dont j'ai besoin.

Je dois écrire les valeurs dans un fichier de données de longueur fixe.

+0

Je n'ai aucun contrôle sur l'ensemble de données que je reçois. La seule chose que je sais, c'est qu'elle contient tout. –

Répondre

217

En plus de limiter les colonnes sélectionnées pour réduire la bande passante et de la mémoire:

 DataTable t; 
     t.Columns.Remove("columnName"); 
     t.Columns.RemoveAt(columnIndex); 
+1

Juste pour clarifier: Cela fonctionne aussi quand 'DataTable' a déjà des lignes existantes, pas seulement sur un' DataTable' vide. –

21

Pour enlever toutes les colonnes après celui que vous voulez, cette petite fonction devrait fonctionner. Il supprimera à l'index 10 (rappelez-vous que les colonnes sont basées sur 0), jusqu'à ce que le nombre de colonnes soit inférieur ou égal à 10.

 DataTable dt; 
     int desiredSize = 10; 

     while (dt.Columns.Count > desiredSize) 
     { 
      dt.Columns.RemoveAt(desiredSize); 
     } 
+0

juste mon 2c, je n'aime pas cette solution, en travaillant avec des index de colonne mène à la maintenance de cauchemar .. – batman

+0

@batman comment l'écririez-vous? – Muflix

+0

la question comprend la déclaration suivante: "..columns défini que je veux .." de sorte que signifie que les colonnes nécessaires ne sont même pas nécessairement dans l'ordre séquentiel de sorte qu'on ne peut pas simplement dire "J'ai besoin des 10 premières colonnes". En tant que telle la solution doit contenir un tableau de noms de colonnes qu'il veut, alors nous pouvons éliminer tous les autres ne tombant pas dans cet ensemble "défini" de noms. Différentes façons de mettre en œuvre cela; de simple boucle foreach à requête ou linq en utilisant IN. – batman

Questions connexes