Значения по умолчанию назначаются, когда вы добавляете строку в таблицу, а столбцу еще не присвоено значение. Следовательно, существующие строки не будут обновляться при изменении схемы. Если вы хотите использовать универсальные средства обновления таблицы и применения значений по умолчанию к существующим строкам, тогда я бы создал метод для копирования строк из текущей таблицы данных в новую таблицу данных с дополнительным столбцом в ней. Например:
void doTableStuff()
{
DataTable table1 = makeTable();
table1.Rows.Add(new string[] { "Frederic", "Robert" });
table1 = updateTable(table1);
if (table1.Rows[0]["Sam"] == "Samantha")
{
Console.WriteLine("I Was Right!");
}
else
{
Console.WriteLine("I Was Wrong!");
}
}
DataTable makeTable()
{
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn { ColumnName = "Fred", DataType = typeof(string), DefaultValue = "fred" });
dt.Columns.Add(new DataColumn { ColumnName = "Bob", DataType = typeof(string), DefaultValue = "bob" });
return dt;
}
DataTable updateTable(DataTable oldTable)
{
DataTable newTable = makeTable();
newTable.Columns.Add(new DataColumn { ColumnName = "Sam", DataType = typeof(string), DefaultValue = "Samantha" });
newTable.Merge(oldTable, true, MissingSchemaAction.Add);
return newTable;
}
Извините, я не пытался запустить это, но вы должны понять. Надеюсь, что это работает.
Приветствия