DataRow
配列をに変換したいDataTable
...これを行う最も簡単な方法は何ですか?
DataRow
配列をに変換したいDataTable
...これを行う最も簡単な方法は何ですか?
回答:
DataRow配列を反復処理して、(DataRowのコピーを取得するために、必要に応じてDataRow.ImportRowを使用して)次のように追加しないでください。
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)
方法の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.
"。With-Cloneバージョンエラー: " 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");
DataTable dt = new DataTable();
foreach (DataRow dr in drResults)
{
dt.ImportRow(dr);
}
.Net 3.5以降にDataTableExtensionsを追加、DataTableExtensions.CopyToDataTableメソッドを使用
datarow配列の場合は、.CopyToDataTable()を使用するだけで、データテーブルが返されます。
単一のデータ行を使用する場合
new DataRow[] { myDataRow }.CopyToDataTable()
最初にデータテーブルの構造を複製してから、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;