他のテーブルからDataColumnを追加することはできません。既存のテーブルとの関連付けが既にあり、DataColumnはObjectであるためAddメソッドへの参照によって渡されます。それをコピーする必要があります。名前で個々の列をコピーするために使用することができ、拡張方法、すなわちtableA.CopyColumnTo("Column1", tableB);
もあることを
public static class DataColumnExtensions
{
public static DataColumn CopyTo(this DataColumn column, DataTable table)
{
DataColumn newColumn = new DataColumn(column.ColumnName, column.DataType, column.Expression, column.ColumnMapping);
newColumn.AllowDBNull = column.AllowDBNull;
newColumn.AutoIncrement = column.AutoIncrement;
newColumn.AutoIncrementSeed = column.AutoIncrementSeed;
newColumn.AutoIncrementStep = column.AutoIncrementStep;
newColumn.Caption = column.Caption;
newColumn.DateTimeMode = column.DateTimeMode;
newColumn.DefaultValue = column.DefaultValue;
newColumn.MaxLength = column.MaxLength;
newColumn.ReadOnly = column.ReadOnly;
newColumn.Unique = column.Unique;
table.Columns.Add(newColumn);
return newColumn;
}
public static DataColumn CopyColumnTo(this DataTable sourceTable, string columnName, DataTable destinationTable)
{
if (sourceTable.Columns.Contains(columnName))
{
return sourceTable.Columns[columnName].CopyTo(destinationTable);
}
else
{
throw new ArgumentException("The specified column does not exist", "columnName");
}
}
}
public class MyClass
{
public static void Main()
{
DataTable tableA = new DataTable("TableA");
tableA.Columns.Add("Column1", typeof(int));
tableA.Columns.Add("Column2", typeof(string));
DataTable tableB = new DataTable("TableB");
foreach (DataColumn column in tableA.Columns)
{
column.CopyTo(tableB);
}
}
}
注:ここではあなたがそれを行うことができます一つの方法です。
新しいテーブルは、元の正確なコピーであるなら、あなたはこのようなデータをコピーすることができます
foreach (DataRow row in tableA.Rows)
{
tableB.Rows.Add(row.ItemArray);
}
またはTIM Schmelterの答えのコードの第二の部分と同様に、それがない場合には正確なコピー。ただし、すべての列を新しいテーブルにコピーしない場合は、エラーチェックをすることをお勧めします。
foreach (DataRow souceRow in sourceTable.Rows)
{
DataRow destinationRow = destinationTable.Rows.Add();
foreach (DataColumn destinationColumn in destinationTable.Columns)
{
string columnName = destinationColumn.ColumnName;
if (sourceTable.Columns.Contains(columnName))
{
destinationRow[columnName] = sourceRow[columnName];
}
}
}
_column_(同じ名前と種類の列を意味する)を追加するか、あるテーブルから別のテーブルへの_data_? –
あるテーブルから別のテーブルにデータを移動します。 –