Ich habe eine Datentabelle mit 5 Spalten und 10 Zeilen. Jetzt möchte ich der DataTable eine neue Spalte hinzufügen und der neuen Spalte den Wert DropDownList zuweisen. Daher sollte der DropDownList-Wert zehnmal zur neuen Spalte hinzugefügt werden. Wie macht man das? Hinweis: Ohne FOR LOOP.
Zum Beispiel: Meine vorhandene Datentabelle sieht so aus.
ID Value
----- -------
1 100
2 150
Jetzt möchte ich dieser Datentabelle eine neue Spalte "CourseID" hinzufügen. Ich habe eine DropDownList. Der ausgewählte Wert ist 1. Meine vorhandene Tabelle sollte also wie folgt aussehen:
ID Value CourseID
----- ------ ----------
1 100 1
2 150 1
Wie macht man das?
Antworten:
Ohne For-Schleife:
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);
quelle
DefaultValue
anschließenden Hinzufügen zurColumns
Sammlung hat den gewünschten Effekt, dass sie auf alle vorhandenen Zeilen angewendet wird. Das Hinzufügen zuColumns
und das anschließende Festlegen von führtDefaultValue
jedoch nicht zum gleichen Ergebnis (in diesem Fall funktioniert es nur für neu hinzugefügte und nicht für vorhandene Zeilen).Fügen Sie die Spalte hinzu und aktualisieren Sie alle Zeilen im
DataTable
Beispiel: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;
quelle
DefaultValue
fürnew System.Data.DataColumn
?DefaultValue
ist nur ein anderer Ansatz. Dieser funktioniert auch und ist nicht weniger effizient, nur ein bisschen weniger prägnant. Es hat auch keine Nachteile, Sie müssen sich nicht merken, ob Sie die Spalte hinzufügen können, bevor Sie den Standardwert anwenden. Wenn Sie diesen Wert nur einmal beim Hinzufügen der Spalte zur Tabelle verwenden möchten, müssen Sie ihnDefaultValue
erneut entfernen .//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; } }
quelle