Saya ingin mengubah DataRow
array menjadi DataTable
... Apa cara termudah untuk melakukan ini?
Saya ingin mengubah DataRow
array menjadi DataTable
... Apa cara termudah untuk melakukan ini?
Jawaban:
Mengapa tidak mengulang melalui array DataRow Anda dan menambahkan (menggunakan DataRow.ImportRow, jika perlu, untuk mendapatkan salinan DataRow), seperti:
foreach (DataRow row in rowArray) {
dataTable.ImportRow(row);
}
Pastikan dataTable Anda memiliki skema yang sama dengan DataRows di larik DataRow Anda.
rowArray.CopyToDataTable();
karena ini membuat skema tabel dan tidak menggantinya dengan objek tabel baru!
Untuk .Net Framework 3.5+
DataTable dt = new DataTable();
DataRow[] dr = dt.Select("Your string");
DataTable dt1 = dr.CopyToDataTable();
Tetapi jika tidak ada baris dalam larik, itu dapat menyebabkan kesalahan seperti Sumber tidak berisi DataRows . Oleh karena itu, jika Anda memutuskan untuk menggunakan metode ini CopyToDataTable()
, Anda harus memeriksa array untuk mengetahui bahwa ia memiliki datarows atau tidak.
if (dr.Length > 0)
DataTable dt1 = dr.CopyToDataTable();
Referensi tersedia di MSDN: Metode DataTableExtensions.CopyToDataTable (IEnumerable)
copyToDataTable()
? Saya tidak menemukannya di .net 2.0
copyToDataTable()
metode membuat salinan sempurna dari kolom dari baris yang dipilih, sedangkan datatable.ImportRow(row)
metode tidak
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.
". Dengan-Clone Version Error: " 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.
" Catatan: StoreOrder
adalah kolom pertama dalam skema tabel. Sepertinya itu mencoba menjejalkan seluruh datarow ke dalam kolom pertama itu
Cara lain adalah dengan menggunakan 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");
Cara sederhananya adalah:
// 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+ menambahkan DataTableExtensions, gunakan Metode DataTableExtensions.CopyToDataTable
Untuk array datarow cukup gunakan .CopyToDataTable () dan itu akan mengembalikan data.
Untuk penggunaan datarow tunggal
new DataRow[] { myDataRow }.CopyToDataTable()
Jika ada yang membutuhkannya di VB.NET:
Dim dataRow as DataRow
Dim yourNewDataTable as new datatable
For Each dataRow In yourArray
yourNewDataTable.ImportRow(dataRow)
Next
Anda perlu mengkloning struktur tabel Data terlebih dahulu lalu mengimpor baris menggunakan for loop
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;