Wie kann ich einer Datentabelle, die bereits Daten enthält, eine neue Spalte und Daten hinzufügen?


80

Wie füge ich DataColumneinem DataTableObjekt, das bereits Daten enthält , ein neues hinzu ?

PseudoCode

//call SQL helper class to get initial data 
DataTable dt = sql.ExecuteDataTable("sp_MyProc");

dt.Columns.Add("NewColumn", type(System.Int32));

foreach(DataRow row in dr.Rows)
{
    //need to set value to NewColumn column
}

Antworten:


124

Fahren Sie einfach mit Ihrem Code fort - Sie sind auf dem richtigen Weg:

//call SQL helper class to get initial data 
DataTable dt = sql.ExecuteDataTable("sp_MyProc");

dt.Columns.Add("NewColumn", typeof(System.Int32));

foreach(DataRow row in dt.Rows)
{
    //need to set value to NewColumn column
    row["NewColumn"] = 0;   // or set it to some other value
}

// possibly save your Dataset here, after setting all the new values

Mussten Sie anrufen, dt.AcceptChanges()nachdem ich die neue Spalte und den neuen Wert hinzugefügt habe?
Michael Kniskern

2
@ Michael: Nein, nicht wirklich. Ihr Datensatz ist jetzt mit diesen neuen Werten vorbereitet. Wenn Sie es speichern möchten, benötigen Sie eine Methode zum Zurückschreiben (über den SqlDataAdapter oder auf andere Weise). AcceptChanges () wird nichts tun (außer diese Änderungen als "akzeptiert" markieren -> sie werden beim nächsten Speichern Ihrer Daten nicht zum Speichern erkannt!)
marc_s

12

Sollte es nicht foreachstatt für sein!?

//call SQL helper class to get initial data  
DataTable dt = sql.ExecuteDataTable("sp_MyProc"); 

dt.Columns.Add("MyRow", **typeof**(System.Int32)); 

foreach(DataRow dr in dt.Rows) 
{ 
    //need to set value to MyRow column 
    dr["MyRow"] = 0;   // or set it to some other value 
} 

7

Hier ist eine alternative Lösung, um die For / ForEach-Schleife zu reduzieren. Dies würde die Schleifenzeit reduzieren und schnell aktualisieren :)

 dt.Columns.Add("MyRow", typeof(System.Int32));
 dt.Columns["MyRow"].Expression = "'0'";

2
@Akxaya, würde es Ihnen etwas ausmachen, näher darauf einzugehen, wie diese Lösung funktioniert?
Mikael Dúi Bolinder

DataTable dt = sql.ExecuteDataTable ("sp_MyProc"); // dt.Columns.Add ("MyRow", typeof (System.Int32)); dt.Columns ["MyRow"]. Expression = "'0'";
Akxaya

6

Nur Sie möchten den Standardwertparameter festlegen. Diese aufrufende dritte Überladungsmethode.

dt.Columns.Add("MyRow", type(System.Int32),0);

2

Versuche dies

> dt.columns.Add("ColumnName", typeof(Give the type you want));
> dt.Rows[give the row no like  or  or any no]["Column name in which you want to add data"] = Value;
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.