Başka bir tablodan bir DataColumn ekleyemezsiniz, çünkü özgün bir tabloyla zaten bir ilişkilendirmesi vardır ve DataColumn bir Object olduğundan, Add yöntemine başvurularak geçirilir. Kopyalamanız gerekecek. adıyla tek tek sütunları Kopya için kullanılabilecek bir uzantısı yöntemi, yani tableA.CopyColumnTo("Column1", tableB);
da olduğu
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);
}
}
}
Not: Burada bunu yapabilir bir yolu.
foreach (DataRow row in tableA.Rows)
{
tableB.Rows.Add(row.ItemArray);
}
Veya Tim SCHMELTER yanıtında kodunun ikinci parçasına benzer bir şekilde
Değilse: yeni tablo özgün bir kopyasını ise
Sonra bu gibi verileri kopyalayabilirsiniz Tam bir kopya.
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];
}
}
}
sadece ya hareket (aynı ad ve tip bir sütun anlamında) _column_ eklemek isteyen misiniz: Ben, ancak, yeni tabloya tüm sütunları kopyalama değilse bazı hata kontrol öneriyoruz bir tablodan diğerine _data_? –
Verileri bir tablodan diğerine taşıyın. –