Ich möchte ein DataRow
-Array in DataTable
konvertieren. Was ist der einfachste Weg, dies zu tun?
Warum iterieren Sie nicht durch Ihr DataRow-Array und fügen Sie (mithilfe von DataRow.ImportRow, falls erforderlich, um eine Kopie der DataRow zu erhalten) Folgendes hinzu:
foreach (DataRow row in rowArray) {
dataTable.ImportRow(row);
}
Stellen Sie sicher, dass Ihre dataTable das gleiche Schema hat wie die DataRows in Ihrem DataRow-Array.
Für .Net Framework 3.5 und höher
DataTable dt = new DataTable();
DataRow[] dr = dt.Select("Your string");
DataTable dt1 = dr.CopyToDataTable();
Wenn das Array keine Zeilen enthält, kann dies zu Fehlern wie Die Quelle enthält keine DataRows führen. Wenn Sie sich für diese Methode CopyToDataTable()
entscheiden, sollten Sie daher überprüfen, ob das Array Datenzeilen hat oder nicht.
if (dr.Length > 0)
DataTable dt1 = dr.CopyToDataTable();
Referenz unter MSDN verfügbar: DataTableExtensions.CopyToDataTable-Methode (IEnumerable)
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");
DataTable dt = new DataTable();
DataRow[] dr = (DataTable)dsData.Tables[0].Select("Some Criteria");
dt.Rows.Add(dr);
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 = myDataRowCollection.CopyToDataTable<DataRow>();
DataTable dt = new DataTable();
foreach (DataRow dr in drResults)
{
dt.ImportRow(dr);
}
Hier ist die Lösung. Es sollte gut funktionieren.
DataTable dt = new DataTable();
dt = dsData.Tables[0].Clone();
DataRows[] drResults = dsData.Tables[0].Select("ColName = 'criteria');
foreach(DataRow dr in drResults)
{
object[] row = dr.ItemArray;
dt.Rows.Add(row);
}
.Net 3.5+ hinzugefügt DataTableExtensions, verwenden Sie die DataTableExtensions.CopyToDataTable-Methode
Verwenden Sie für datarow array einfach .CopyToDataTable () und es wird datable zurückgegeben.
Für einzelne Datarow-Nutzung
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
DataTable Assetdaterow =
(
from s in dtResourceTable.AsEnumerable()
where s.Field<DateTime>("Date") == Convert.ToDateTime(AssetDate)
select s
).CopyToDataTable();
Sie müssen zuerst die Struktur der Datentabelle klonen und dann die Zeilen mit der for-Schleife importieren
DataTable dataTable =dtExisting.Clone();
foreach (DataRow row in rowArray) {
dataTable.ImportRow(row);
}
Sie könnten System.Linq folgendermaßen verwenden:
if (dataRows != null && dataRows.Length > 0)
{
dataTable = dataRows.AsEnumerable().CopyToDataTable();
}
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);
}