Answers:
为什么不遍历DataRow数组并添加(如有必要,使用DataRow.ImportRow获得DataRow的副本),如下所示:
foreach (DataRow row in rowArray) {
dataTable.ImportRow(row);
}
确保您的dataTable具有与DataRow数组中的DataRows相同的架构。
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 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
是表架构中的第一列。似乎正在尝试将整个数据行塞入第一列
另一种方法是使用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");
.Net 3.5+添加了DataTableExtensions,请使用DataTableExtensions.CopyToDataTable方法
对于datarow数组,只需使用.CopyToDataTable(),它将返回datatable。
供单个数据行使用
new DataRow[] { myDataRow }.CopyToDataTable()
您需要先克隆数据表的结构,然后使用for循环导入行
DataTable dataTable =dtExisting.Clone();
foreach (DataRow row in rowArray) {
dataTable.ImportRow(row);
}
DataTable dataTable = new DataTable(); dataTable.ImportRow(dataRow); MyControl.DataSource = dataTable;