c#datagridview中的第一列正在增加负值
c# first column in datagridview is getting incremented with negative values
我有一个连接到我的 sql 数据库的数据网格视图。看起来像这样
create table Scule
(
id int Identity constraint pk_idscule Primary key,
unelte varchar(255),
nume_persoana varchar (255),
data_luat date,
data_adus date
);
每当我在 datagridview 中添加一些东西时,我的 id 就会增加,但只是视觉上的值从 -1 开始下降..在数据库中它保存得很好。我正在使用 windows 表单 c#。如果我在最后两行之间切换,它只会无缘无故地越来越低。我试图从 sql 中的 id 中删除标识和约束,但没有结果
是的,这就是它的工作原理。我怀疑你有一个 datatable 作为你的网格的支持,主键列被指定为以负步自动递增(当你创建一个 DataSet 并用 DataTables 和 TableAdapters 填充它时的典型行为)
重要的是要记住 DataSet 与数据库毫无关系;它与数据库无关。它是一组本地容器,当您在表单上显示数据并使用它时,数据就保存在其中。适配器从数据库加载它并将其保存到数据库
这种自动负数是一种机制,它允许您在本地数据集中拥有满足“主键作为数字”约束的数据,还允许您以相关方式将数据保存在一起。所以你有一个 Scule - 我会假装那是一所学校,人们在那里学习东西。学校有学生,所以您可能还有 table 名学生。每个学生都有一个将他们关联到学校的 SchoolId。这意味着您可以在学校和学生之间建立关系
当您添加新学校时,它的 ID 为 -1。如果您添加 10 个学生,他们的 ID 将在 -1 到 -10 之间,他们的 SchoolId 将为 -1
当您将学校保存到数据库中时(并且您需要先保存学校,以便将学生关联起来),数据库将生成一个实际的学校,例如 427
通过魔法(实际上是通过 运行 SELECT SCOPE_IDENTITY()
在数据库中创建学校的插入之后)DataSet 将下载 427 的实际值并用它替换 -1。如果您将其配置为级联此更新(您应该),那么所有相关学生(保存前学校 ID 为 -1 的学生)如果更新为 427,也将拥有他们的学校。这样数据仍然关联在一起:
- 学号是-1
- 十个学生的 SchoolId -1
- 学校得救并获得 427 分贝
- DataSet 中的学校对象获得 427
- 学生对象更新为 427
学生现在可以全部保存到数据库中,他们将与学校427相关联
大多数情况下你应该忽略这个 -1 值 - 你只是因为你可以看到它而烦恼,但通常我们不会向用户显示主键。当你在最后一行和倒数第二行之间移动时,你会发现 ID 不断减少,因为进入最后一行会产生一个新的临时表,但你永远不会填写它,所以它永远不会提交。为了防止出现问题,临时的永远不会被重用,所以负增量不断发生。别担心,这在宏伟的计划中绝对不重要。您可以为自己和您的用户姐姐做的最好的事情是从网格中删除 PK 列,这样您就不会看到这种情况发生
我有一个连接到我的 sql 数据库的数据网格视图。看起来像这样
create table Scule
(
id int Identity constraint pk_idscule Primary key,
unelte varchar(255),
nume_persoana varchar (255),
data_luat date,
data_adus date
);
每当我在 datagridview 中添加一些东西时,我的 id 就会增加,但只是视觉上的值从 -1 开始下降..在数据库中它保存得很好。我正在使用 windows 表单 c#。如果我在最后两行之间切换,它只会无缘无故地越来越低。我试图从 sql 中的 id 中删除标识和约束,但没有结果
是的,这就是它的工作原理。我怀疑你有一个 datatable 作为你的网格的支持,主键列被指定为以负步自动递增(当你创建一个 DataSet 并用 DataTables 和 TableAdapters 填充它时的典型行为)
重要的是要记住 DataSet 与数据库毫无关系;它与数据库无关。它是一组本地容器,当您在表单上显示数据并使用它时,数据就保存在其中。适配器从数据库加载它并将其保存到数据库
这种自动负数是一种机制,它允许您在本地数据集中拥有满足“主键作为数字”约束的数据,还允许您以相关方式将数据保存在一起。所以你有一个 Scule - 我会假装那是一所学校,人们在那里学习东西。学校有学生,所以您可能还有 table 名学生。每个学生都有一个将他们关联到学校的 SchoolId。这意味着您可以在学校和学生之间建立关系
当您添加新学校时,它的 ID 为 -1。如果您添加 10 个学生,他们的 ID 将在 -1 到 -10 之间,他们的 SchoolId 将为 -1
当您将学校保存到数据库中时(并且您需要先保存学校,以便将学生关联起来),数据库将生成一个实际的学校,例如 427
通过魔法(实际上是通过 运行 SELECT SCOPE_IDENTITY()
在数据库中创建学校的插入之后)DataSet 将下载 427 的实际值并用它替换 -1。如果您将其配置为级联此更新(您应该),那么所有相关学生(保存前学校 ID 为 -1 的学生)如果更新为 427,也将拥有他们的学校。这样数据仍然关联在一起:
- 学号是-1
- 十个学生的 SchoolId -1
- 学校得救并获得 427 分贝
- DataSet 中的学校对象获得 427
- 学生对象更新为 427
学生现在可以全部保存到数据库中,他们将与学校427相关联
大多数情况下你应该忽略这个 -1 值 - 你只是因为你可以看到它而烦恼,但通常我们不会向用户显示主键。当你在最后一行和倒数第二行之间移动时,你会发现 ID 不断减少,因为进入最后一行会产生一个新的临时表,但你永远不会填写它,所以它永远不会提交。为了防止出现问题,临时的永远不会被重用,所以负增量不断发生。别担心,这在宏伟的计划中绝对不重要。您可以为自己和您的用户姐姐做的最好的事情是从网格中删除 PK 列,这样您就不会看到这种情况发生