编码
// *** создаю DataTable
dt_028 = new DataTable();
// *** Добавляю поля в DataTable
// поле Автоинкремент
workColumn = dt_028.Columns.Add("ID", typeof(Int32));
workColumn.AutoIncrement = true;
workColumn.AutoIncrementSeed = 1;
workColumn.AutoIncrementStep = 1;
// поля DataTable
dt_028.Columns.Add("pole_name_1", typeof(String));
dt_028.Columns.Add("pole_name_2", typeof(String));
dt_028.Columns.Add("pole_name_3", typeof(String));
// *** Отображаю DataTable в dataGridView
dataGridView1.DataSource = dt_028;
当我将 dataGridView 中的光标从倒数第二行移动到最后一行时,“ID”字段中的 AutoIncrement 值增加。
那些。将光标移动到最后一行,但没有添加一行,并且AutoIncrement增加了。
问题
如何仅在添加 dataGridView 行时才增加自动增量,而不仅仅是当光标位于最后一行时?
屏幕

从此列中删除自动增量。剩下的就是:
订阅
DataTable新的线路添加事件:在事件处理程序中,插入所需的值:
最好完全删除此列(一个选项是将其隐藏)。并在数据库/文件中的数据保存时给行编号。实际上,这些数字真的需要吗?在数据库中,ID 必须是您自己的。但是文件不需要它。
事实上,移动到最后一行
DataGridView然后再次返回会导致DataTable将新行插入到指定的数据源中。插入新行会导致字段递增ID,但是由于 该行实际上并未插入,最后的更改被拒绝 -DataTable.RejectChanges(),即 自上次调用以来发生的那些更改DataTable.AcceptChanges(),而增量的值未重置,因此,当您再次移动到最后一行时,该DataGridView值ID不是您期望看到的。可以做什么?
解决方案 #1
手动增加,即
workColumn.AutoIncrement在列上禁用ID并自己设置值。解决方案#2
将生成任务分配
ID给您的数据库,我认为这更正确。解决方案 #3
如果需要在客户端生成它,请
int使用 type而不是 type 。GuidID