ฉันต้องการแปลงDataRow
อาร์เรย์เป็นDataTable
... วิธีที่ง่ายที่สุดในการทำเช่นนี้คืออะไร?
ฉันต้องการแปลงDataRow
อาร์เรย์เป็นDataTable
... วิธีที่ง่ายที่สุดในการทำเช่นนี้คืออะไร?
คำตอบ:
ทำไมไม่ทำซ้ำผ่านอาร์เรย์ DataRow ของคุณและเพิ่ม (โดยใช้ DataRow.ImportRow หากจำเป็นเพื่อรับสำเนา DataRow) สิ่งที่ต้องการ:
foreach (DataRow row in rowArray) {
dataTable.ImportRow(row);
}
ตรวจสอบให้แน่ใจว่า dataTable ของคุณมีสคีมาเดียวกันกับ 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 Method (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 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.
" หมายเหตุ: 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");
วิธีง่ายๆคือ:
// 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);
}
DataTable Assetdaterow =
(
from s in dtResourceTable.AsEnumerable()
where s.Field<DateTime>("Date") == Convert.ToDateTime(AssetDate)
select s
).CopyToDataTable();
.Net 3.5+ เพิ่ม DataTableExtensions ใช้เมธอด DataTableExtensions.CopyToDataTable
สำหรับอาร์เรย์ datarow เพียงใช้. CopyToDataTable () และจะส่งคืนข้อมูล
สำหรับการใช้ datarow เดียว
new DataRow[] { myDataRow }.CopyToDataTable()
นี่คือวิธีแก้ปัญหา มันควรจะทำงานได้ดี
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);
}
ในกรณีที่ทุกคนต้องการใน VB.NET:
Dim dataRow as DataRow
Dim yourNewDataTable as new datatable
For Each dataRow In yourArray
yourNewDataTable.ImportRow(dataRow)
Next
คุณสามารถใช้ System.Linq ดังนี้:
if (dataRows != null && dataRows.Length > 0)
{
dataTable = dataRows.AsEnumerable().CopyToDataTable();
}
คุณต้องโคลนโครงสร้างของตารางข้อมูลก่อนจากนั้นจึงนำเข้าแถวโดยใช้สำหรับลูป
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;