Ich möchte ein DataRow
Array in DataTable
... konvertieren. Was ist der einfachste Weg, dies zu tun?
Ich möchte ein DataRow
Array in DataTable
... konvertieren. Was ist der einfachste Weg, dies zu tun?
Antworten:
Warum nicht Ihr DataRow-Array durchlaufen und hinzufügen (ggf. mit DataRow.ImportRow, um eine Kopie der DataRow zu erhalten), etwa:
foreach (DataRow row in rowArray) {
dataTable.ImportRow(row);
}
Stellen Sie sicher, dass Ihre dataTable dasselbe Schema wie die DataRows in Ihrem DataRow-Array hat.
rowArray.CopyToDataTable();
das Tabellenschema beizubehalten und es nicht durch ein neues Tabellenobjekt zu ersetzen!
Für .Net Framework 3.5+
DataTable dt = new DataTable();
DataRow[] dr = dt.Select("Your string");
DataTable dt1 = dr.CopyToDataTable();
Wenn das Array jedoch keine Zeilen enthält , kann dies zu Fehlern führen, z. B. Die Quelle enthält keine DataRows . Wenn Sie sich für diese Methode entscheiden CopyToDataTable()
, sollten Sie daher das Array überprüfen, um festzustellen , ob es Datenzeilen enthält oder nicht.
if (dr.Length > 0)
DataTable dt1 = dr.CopyToDataTable();
Referenz verfügbar bei MSDN: DataTableExtensions.CopyToDataTable-Methode (IEnumerable)
copyToDataTable()
? Ich habe es nicht in .net 2.0 gefunden
copyToDataTable()
Methode eine perfekte Kopie der Spalten der ausgewählten Zeilen erstellt, während die datatable.ImportRow(row)
Methode dies nicht tut
DataTable dt = new DataTable();
DataRow[] dr = (DataTable)dsData.Tables[0].Select("Some Criteria");
dt.Rows.Add(dr);
Input array is longer than the number of columns in this table.
". With-Clone-Versionsfehler: " Unable to cast object of type 'System.Data.DataRow' to type 'System.IConvertible'.Couldn't store <System.Data.DataRow> in StoreOrder Column. Expected type is Int64.
" Hinweis: StoreOrder
ist die erste Spalte im Tabellenschema. Es scheint, als würde versucht, das gesamte Datenfenster in diese erste Spalte zu stecken
Eine andere Möglichkeit ist die Verwendung einer DataView
// Create a DataTable
DataTable table = new DataTable()
...
// Filter and Sort expressions
string expression = "[Birth Year] >= 1983";
string sortOrder = "[Birth Year] ASC";
// Create a DataView using the table as its source and the filter and sort expressions
DataView dv = new DataView(table, expression, sortOrder, DataViewRowState.CurrentRows);
// Convert the DataView to a DataTable
DataTable new_table = dv.ToTable("NewTableName");
Einfacher Weg ist:
// dtData is DataTable that contain data
DataTable dt = dtData.Select("Condition=1").CopyToDataTable();
// or existing typed DataTable dt
dt.Merge(dtData.Select("Condition=1").CopyToDataTable());
DataTable dt = new DataTable();
foreach (DataRow dr in drResults)
{
dt.ImportRow(dr);
}
DataTable Assetdaterow =
(
from s in dtResourceTable.AsEnumerable()
where s.Field<DateTime>("Date") == Convert.ToDateTime(AssetDate)
select s
).CopyToDataTable();
.Net 3.5+ DataTableExtensions hinzugefügt, verwenden Sie die DataTableExtensions.CopyToDataTable-Methode
Verwenden Sie für ein Datenarray-Array einfach .CopyToDataTable () und es wird datatable zurückgegeben.
Für einzelne Daten verwenden
new DataRow[] { myDataRow }.CopyToDataTable()
Falls jemand es in VB.NET braucht:
Dim dataRow as DataRow
Dim yourNewDataTable as new datatable
For Each dataRow In yourArray
yourNewDataTable.ImportRow(dataRow)
Next
Sie müssen zuerst die Struktur der Datentabelle klonen und dann Zeilen mit der for-Schleife importieren
DataTable dataTable =dtExisting.Clone();
foreach (DataRow row in rowArray) {
dataTable.ImportRow(row);
}
DataTable dataTable = new DataTable();
dataTable = OldDataTable.Tables[0].Clone();
foreach(DataRow dr in RowData.Tables[0].Rows)
{
DataRow AddNewRow = dataTable.AddNewRow();
AddNewRow.ItemArray = dr.ItemArray;
dataTable.Rows.Add(AddNewRow);
}
DataTable dataTable = new DataTable(); dataTable.ImportRow(dataRow); MyControl.DataSource = dataTable;