143 votes

Supprimer des colonnes de DataTable en C#

J'ai un DataSet à partir duquel je récupère une DataTable qui m'est renvoyée par un appel de fonction. Elle comporte 15 à 20 colonnes, mais je ne veux que 10 colonnes de données.

Existe-t-il un moyen de supprimer les colonnes dont je ne veux pas, de copier la DataTable dans une autre qui ne contient que les colonnes définies que je veux ou est-il préférable d'itérer la collection et de n'utiliser que les colonnes dont j'ai besoin ?

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

0 votes

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

355voto

Tom Ritter Points 44352

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

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

18 votes

Juste pour clarifier : cela fonctionne également lorsque le DataTable a déjà des rangées existantes, non seulement sur un site vide DataTable .

25voto

Timothy Carter Points 7079

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

        DataTable dt;
        int desiredSize = 10;

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

2 votes

Juste mon 2c, je n'aime pas cette solution, travailler avec des index de colonnes conduit à une maintenance cauchemardesque .

2 votes

La question comprend l'énoncé suivant : " colonnes définies que je veux " donc cela signifie que les colonnes nécessaires ne sont même pas nécessairement dans un ordre séquentiel donc 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 souhaite, puis nous pouvons éliminer toutes les autres qui n'entrent pas dans cet ensemble "défini" de noms. Il existe différentes façons de mettre en œuvre cette solution, de la simple boucle foreach aux requêtes ou linq utilisant IN.

8voto

SU7 Points 776

La question a déjà été marquée comme répondue, mais je suppose que la question stipule que la personne veut supprimer plusieurs colonnes d'une DataTable .

Alors pour cela, voici ce que j'ai fait, lorsque j'ai rencontré le même problème.

string[] ColumnsToBeDeleted = { "col1", "col2", "col3", "col4" };

foreach (string ColName in ColumnsToBeDeleted)
{
    if (dt.Columns.Contains(ColName))
        dt.Columns.Remove(ColName);
}

0voto

Mostlyharmless Points 2050

D'où provient l'ensemble de données ? Utilisez-vous cette DataTable particulière ailleurs ? Il est souvent préférable de limiter les colonnes à la source. Si vous remplissez le DataSet à partir des résultats d'une requête, vous pouvez essayer de limiter les données récupérées.

-8voto

Kevin Sheffield Points 2121

Je n'écrirais simplement pas les colonnes qui ne vous intéressent pas dans le fichier plat.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X