80 votes

Comment ajouter une nouvelle colonne avec une valeur à une table de données existante ?

J'ai une table de données avec 5 colonnes et 10 lignes. Maintenant, je veux ajouter une nouvelle colonne à la table de données et je veux attribuer la valeur de la liste déroulante à la nouvelle colonne. Ainsi, la valeur de la liste déroulante doit être ajoutée 10 fois à la nouvelle colonne. Comment faire ? Note : Sans utiliser FOR LOOP.

Par exemple : Mon DataTable existant est comme ceci.

   ID             Value
  -----          -------
    1              100
    2              150

Maintenant je veux ajouter une nouvelle colonne "CourseID" à cette table de données. J'ai une DropDownList. Sa valeur sélectionnée est 1. Donc mon tableau existant devrait être comme ci-dessous :

    ID              Value         CourseID
   -----            ------       ----------
    1                100             1
    2                150             1

Comment faire ?

0 votes

@CheckRaise : Cela prendrait plus de temps pour compléter la boucle, si la DataTable contient plus d'enregistrements.

154voto

Keith Walton Points 2338

Sans For loop :

Dim newColumn As New Data.DataColumn("Foo", GetType(System.String))     
newColumn.DefaultValue = "Your DropDownList value" 
table.Columns.Add(newColumn) 

C# :

System.Data.DataColumn newColumn = new System.Data.DataColumn("Foo", typeof(System.String));
newColumn.DefaultValue = "Your DropDownList value";
table.Columns.Add(newColumn);

14 votes

+1 Je retire ce que j'ai dit. La mise en place de la colonne avec le DefaultValue puis en l'ajoutant à la Columns a l'effet désiré d'être appliqué à toutes les lignes existantes. Cependant, en l'ajoutant à Columns puis de régler le DefaultValue ne produit pas le même résultat (dans ce cas, il ne fonctionne que sur les lignes nouvellement ajoutées et non sur les lignes existantes).

0 votes

Pourquoi la table ne sort pas dans le contexte actuel ?

19voto

Tim Schmelter Points 163781

Ajoutez la colonne et mettez à jour toutes les lignes dans le fichier DataTable par exemple :

DataTable tbl = new DataTable();
tbl.Columns.Add(new DataColumn("ID", typeof(Int32)));
tbl.Columns.Add(new DataColumn("Name", typeof(string)));
for (Int32 i = 1; i <= 10; i++) {
    DataRow row = tbl.NewRow();
    row["ID"] = i;
    row["Name"] = i + ". row";
    tbl.Rows.Add(row);
}
DataColumn newCol = new DataColumn("NewColumn", typeof(string));
newCol.AllowDBNull = true;
tbl.Columns.Add(newCol);
foreach (DataRow row in tbl.Rows) {
    row["NewColumn"] = "You DropDownList value";
}
//if you don't want to allow null-values'
newCol.AllowDBNull = false;

0 votes

Et en utilisant DefaultValue para new System.Data.DataColumn ?

0 votes

@Kiquenet : Pourquoi devrais-je utiliser ça ? Ne serait-ce pas un duplicata pour Réponse de Keith alors ? Utilisation de DefaultValue est juste une approche différente. Celle-ci fonctionne aussi et n'est pas moins efficace, juste un peu moins concise. Elle n'a pas non plus d'inconvénients, vous n'avez pas besoin de vous rappeler si vous pouvez ajouter la colonne avant d'appliquer la valeur par défaut. De plus, si vous ne voulez cette valeur qu'une seule fois lorsque vous ajoutez la colonne à la table, vous devez supprimer la balise DefaultValue encore.

2 votes

L'OP ne vient-il pas de dire SANS UTILISER LA BOUCLE FOR ! ?

-2voto

Dhiraj Shejale Points 1
//Data Table

 protected DataTable tblDynamic
        {
            get
            {
                return (DataTable)ViewState["tblDynamic"];
            }
            set
            {
                ViewState["tblDynamic"] = value;
            }
        }
//DynamicReport_GetUserType() function for getting data from DB

System.Data.DataSet ds = manage.DynamicReport_GetUserType();
                tblDynamic = ds.Tables[13];

//Add Column as "TypeName"

                tblDynamic.Columns.Add(new DataColumn("TypeName", typeof(string)));

//fill column data against ds.Tables[13]

                for (int i = 0; i < tblDynamic.Rows.Count; i++)
                {

                    if (tblDynamic.Rows[i]["Type"].ToString()=="A")
                    {
                        tblDynamic.Rows[i]["TypeName"] = "Apple";
                    }
                    if (tblDynamic.Rows[i]["Type"].ToString() == "B")
                    {
                        tblDynamic.Rows[i]["TypeName"] = "Ball";
                    }
                    if (tblDynamic.Rows[i]["Type"].ToString() == "C")
                    {
                        tblDynamic.Rows[i]["TypeName"] = "Cat";
                    }
                    if (tblDynamic.Rows[i]["Type"].ToString() == "D")
                    {
                        tblDynamic.Rows[i]["TypeName"] = "Dog;
                    }
                }

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