protected void CopyData(DataTable source, DataTable destination)
{
var visbleCount = selectedField.Count(x => x.visible);
destination.BeginLoadData();
foreach (DataRow dr in source.Rows)
{
var newrow = destination.NewRow();
foreach (var rf in selectedField)
{
if (rf.visible)
{
newrow[rf.outputField] = dr[rf.outputField];
}
}
//Выставляем явно значения определенного типа для полей: "Сумма", "Доля рынка в %" и т.д.
//(visbleCount * 2) - потому, что участвует код (первичный ключ) и строковое значение,
//пример: PriceCode и PriceName.
for (int i = (visbleCount * 2); i < source.Columns.Count; i++)
{
if (!(dr[source.Columns[i].ColumnName] is DBNull) && destination.Columns.Contains(source.Columns[i].ColumnName))
{
newrow[source.Columns[i].ColumnName] = Convert.ChangeType(dr[source.Columns[i].ColumnName], destination.Columns[source.Columns[i].ColumnName].DataType);
}
}
destination.Rows.Add(newrow);
}
destination.EndLoadData();
}