Tôi muốn chuyển đổi một DataRow
mảng thành DataTable
... Cách đơn giản nhất để thực hiện việc này là gì?
Tôi muốn chuyển đổi một DataRow
mảng thành DataTable
... Cách đơn giản nhất để thực hiện việc này là gì?
Câu trả lời:
Tại sao không lặp lại qua mảng DataRow của bạn và thêm (sử dụng DataRow.ImportRow, nếu cần, để nhận bản sao của DataRow), đại loại như:
foreach (DataRow row in rowArray) {
dataTable.ImportRow(row);
}
Đảm bảo rằng dataTable của bạn có cùng một lược đồ với DataRows trong mảng DataRow của bạn.
rowArray.CopyToDataTable();
vì điều này giữ lược đồ bảng và không thay thế nó bằng đối tượng bảng mới!
Đối với .Net Framework 3.5+
DataTable dt = new DataTable();
DataRow[] dr = dt.Select("Your string");
DataTable dt1 = dr.CopyToDataTable();
Nhưng nếu không có hàng nào trong mảng, nó có thể gây ra các lỗi như Nguồn không chứa DataRows . Do đó, nếu bạn quyết định sử dụng phương pháp này CopyToDataTable()
, bạn nên kiểm tra mảng để biết nó có datarows hay không.
if (dr.Length > 0)
DataTable dt1 = dr.CopyToDataTable();
Tham khảo có sẵn tại MSDN: Phương pháp DataTableExtensions.CopyToDataTable (IEnumerable)
copyToDataTable()
đâu? Tôi không tìm thấy nó trong .net 2.0
copyToDataTable()
phương pháp tạo ra một bản sao hoàn hảo của các cột các hàng đã chọn, trong khi datatable.ImportRow(row)
phương pháp doesnt
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.
". Lỗi phiên bản với bản sao: " 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.
" Lưu ý: StoreOrder
là cột đầu tiên trong lược đồ bảng. Dường như nó đang cố gắng để mứt toàn bộ DataRow vào cột đầu tiên
Một cách khác là sử dụng 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");
Cách đơn giản là:
// 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+ đã thêm DataTableExtensions, sử dụng DataTableExtensions.CopyToDataTable Method
Đối với mảng datarow chỉ cần sử dụng .CopyToDataTable () và nó sẽ trả về dữ liệu.
Đối với sử dụng dữ liệu đơn lẻ
new DataRow[] { myDataRow }.CopyToDataTable()
Trong trường hợp bất kỳ ai cần nó trong VB.NET:
Dim dataRow as DataRow
Dim yourNewDataTable as new datatable
For Each dataRow In yourArray
yourNewDataTable.ImportRow(dataRow)
Next
Bạn cần sao chép cấu trúc của bảng Dữ liệu trước rồi nhập các hàng bằng vòng lặp for
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;