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
}
Michael Kniskern
quelle

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
marc_s
quelle
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 
} 
Imir Hoxha
quelle
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'";
Akxaya
quelle
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);
Nishantha
quelle
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;
Himanshu Shukla
quelle