C# DataGridView阻止自动增加id绑定列

C# DataGridView阻止自动增加id绑定列,c#,winforms,datagridview,C#,Winforms,Datagridview,我有一个id(identity)列的数据库。此列已绑定到我的DataGridView(WindowsForms)。每当我向DataGridView添加一行(它还没有添加到数据库,只是添加到DataGridView),此列中的数字都会增加一。非常恼人的行为,我不知道如何阻止它 我没有使用EF或antyhing类似的工具。仅将DataGridView中的列(不是自动生成的,而是用户定义的列-AutoGenerateColumns已关闭)添加到DataGridView,并在每个列设置DataPrope

我有一个id(identity)列的数据库。此列已绑定到我的DataGridView(WindowsForms)。每当我向DataGridView添加一行(它还没有添加到数据库,只是添加到DataGridView),此列中的数字都会增加一。非常恼人的行为,我不知道如何阻止它


我没有使用EF或antyhing类似的工具。仅将DataGridView中的列(不是自动生成的,而是用户定义的列-AutoGenerateColumns已关闭)添加到DataGridView,并在每个列设置DataPropertyName。

为什么不隐藏该列

dgvMyDataGridView.Columns["Id"].Visible = false;

我不知道您的代码,但您是否尝试过这样做:

datagridview1.AllowUserToAddRows = false;
并制作一个用于添加行的按钮,并使用

datagridview1.Rows.Add(-1,..,...);

我还没有找到阻止DataGridView自动增加id的方法。但是,我现在可以更改DataGridView中的任何值,将数据源绑定到BindingList而不是DataTable,就像以前一样(每个ComboBoxItem必须实现INotifyPropertyChanged)

private void initializeDgvNotesDataSource()
{            
列表=新列表();
BindingList BindingList=新的BindingList(列表);
BindingSource BindingSource=新的BindingSource();
bindingSource.DataSource=bindingList;
dgvNotes.DataSource=bindingSource;
}

请显示您的代码好吗?它只是一个DataGridView,添加了列。您想查看什么代码?@user867703您的意思是您的列自动填充序号吗?听起来很奇怪,因为至少这不是任何列的默认行为,还要注意,您使用的网格可能是某种自定义网格视图。只要您尝试将一个新的gridview添加到一个新表单并立即进行测试,您肯定不会看到这个问题。@KingKing我已经像您所说的那样做了,但是自动生成id的情况再次发生。而且,我的网格不是自定义DataGridView。只是普通的一个,我通过类型化数据集填充它。我在列中唯一设置的是DataPropertyName。我需要Id列。对于尚未在DB中的行,我将ID设置为-1。所以隐藏列不会改变任何东西,Id仍然会自动增加。好的,您希望“Id”列中的值是多少-1.您可以自己在DataGridView的“UserAddDrow”事件中设置它:
dgvMyDataGridView[“Id”,e.Row.Index].Value=-1
我已经在这样做了。但问题是,当我进入最后一行时(在我按下某个键之前不会触发UserAddedRow),就会创建这个ID。如果退出DataGridView,则会自动生成错误的ID,我希望阻止DataGridView执行此操作。哼…使用
RowEnter
事件,当用户在一行中输入时,验证是否是最后一行,如果是,则将de“ID”值更改为“-1”(未尝试此项)取决于如何填充DataGridView。如果你解除了该列的绑定,你就必须通过代码来控制它。是的,我最初想用按钮点击和一些文本框来添加行。但我发现这对于用户来说更复杂,所以我直接通过数据网格视图来完成所有工作。只需按一个按钮即可保存插入的行(它们首先被标记为保存)。
private void initializeDgvNotesDataSource()
{            
    List<ComboBoxItem> list = new List<ComboBoxItem>();
    BindingList<ComboBoxItem> bindingList = new BindingList<ComboBoxItem>(list);
    BindingSource bindingSource = new BindingSource();
    bindingSource.DataSource = bindingList;
    dgvNotes.DataSource = bindingSource;
}