Я хочу перетворити DataRow
масив на DataTable
... Який найпростіший спосіб це зробити?
Я хочу перетворити DataRow
масив на DataTable
... Який найпростіший спосіб це зробити?
Відповіді:
Чому б не пройти ітерацію через масив DataRow та додати (за потреби, використовуючи DataRow.ImportRow, щоб отримати копію DataRow), щось на зразок:
foreach (DataRow row in rowArray) {
dataTable.ImportRow(row);
}
Переконайтеся, що ваша таблиця даних має таку саму схему, що і DataRows у вашому масиві DataRow.
rowArray.CopyToDataTable();
тому, що це зберігає схему таблиці і не замінює її новим об’єктом таблиці!
Для .Net Framework 3.5+
DataTable dt = new DataTable();
DataRow[] dr = dt.Select("Your string");
DataTable dt1 = dr.CopyToDataTable();
Але якщо в масиві немає рядків, це може спричинити помилки, такі як джерело не містить DataRows . Тому, якщо ви вирішили використовувати цей метод CopyToDataTable()
, вам слід перевірити масив, щоб знати, чи він має дані чи ні.
if (dr.Length > 0)
DataTable dt1 = dr.CopyToDataTable();
Довідка доступна на MSDN: DataTableExtensions.CopyToDataTable метод (IEnumerable)
copyToDataTable()
? Я не знайшов його у .net 2.0
copyToDataTable()
метод створює ідеальну копію стовпців вибраних рядків, тоді як datatable.ImportRow(row)
метод цього не робить
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 Version: " 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.
" Примітка: StoreOrder
це перший стовпець у схемі таблиці. Здається, він намагається забити цілий datarow в першу колонку
Інший спосіб - використання 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();
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, використовуйте метод DataTableExtensions.CopyToDataTable
Для масиву даних просто використовуйте .CopyToDataTable (), і він поверне дані.
Для одноразового використання даних
new DataRow[] { myDataRow }.CopyToDataTable()
У випадку, коли хтось потребує цього у VB.NET:
Dim dataRow as DataRow
Dim yourNewDataTable as new datatable
For Each dataRow In yourArray
yourNewDataTable.ImportRow(dataRow)
Next
Спочатку потрібно клонувати структуру таблиці даних, а потім імпортувати рядки, використовуючи для циклу
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;