Есть DataTable dt. В нем создана колонка:
DataColumn dcIndex = new DataColumn("ID");
dcIndex.AutoIncrement = true;
dcIndex.AutoIncrementSeed = 1;
dcIndex.AutoIncrementStep = 1;
dt.Columns.Add(dcIndex);
Записи как добавляются, так и удаляются. Есть возможность узнать будущее значение в данной колонке при добавлении записи?
Изначально при создании первой строки значение ID равно значению, указанному в свойстве DataColumn.AutoIncrementSeed и далее оно увеличивается на значение, указанное в свойстве DataColumn.AutoIncrementStep.
Следовательно, когда вы создаете новую строку
var row = table.NewRow();
Console.WriteLine(row["ID"]); // новое значение
поле ID уже содержит новое значение, кроме того это значение резервируется и сохраняется в internal свойстве DataColumn.AutoIncrementCurrent. Это позволяет добиться того, что каждое следующее значение инкремента уже не будет равно предыдущему.
Следуя этим рассуждениям у вас может возникнуть желание считать будущее значение ID как:
текущее значение + DataColumn.AutoIncrementStep
но я бы предостерег так делать т.к. нет ни какой гарантии, что после вызова метода table.NewRow() никто еще больше не создал новую строку и следовательно вычисления утратят актуальность.
Поэтому если вам нужно знать значение ID новой строки, вы можете просто создать эту строку:
var row = table.NewRow();
и добавлять (или вовсе не добавлять) ее в коллекцию table.Rows только тогда, когда это будет необходимо.
Значение ID присваивается базой данных при вставке. Достать его можно, например, так:
INSERT INTO Table1(fields...) VALUES (...); SELECT SCOPE_IDENTITY();
Выполнить такой запрос и получить значение ID можно, например, при помощи ExecuteScalar.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей