0

我有一个包含一些列的数据网格:
CategoryID、SubcategoryID、SubcategoryName (不可见、不可见、可见)

创建新子类别时,CategoryID 是必需的。

我正在从 UI 输入一个新的子类别名称。如果我按 ENTER 它将结束当前行编辑,并选择下面的行,而不启动编辑模式(它只是被突出显示)。这个临时选择导致我的 SubcategoryName 从默认的空单元格值null变为string.empty值。

然后,当我尝试将数据发送回数据库时,它会导致问题。数据适配器引发错误,指出 CategoryID 不能为空。根据我的测试,这是由包含一些不可见垃圾的新行引起的。如果我编辑新行并输入一个正常的子类别名称,一切都会正常(CategoryID 由检测 SubcategoryName 不为空的函数插入)。

如何确保我的新行数据被删除?

我尝试使用SendKeys.Send("{ESC}")DG_SubcategoryEdit.CancelEdit()发送 ESC 键

4

1 回答 1

0

经过一段时间尝试解决我发现的问题后,每当您想在一行中插入一些内容作为用户放在那里的内容的补充时,您应该始终使用DefaultValuesNeeded事件而不是RowValidated。如果未提交版本,DefaultValuesNeeded 会正确处理删除行的剩余部分。如果您在RowValidated中插入任何内容,甚至是空值,则该行将被视为已编辑,并将尝试将其自身同步到数据库。

令人困惑的部分(可能是一个错误)是包含 null 的“已编辑”行在 DataGridView 底部显示为新的空行,而不是常规的空行。因此,如果您尝试删除它,该行将引发一个错误,指出您无法删除新行。

于 2013-09-26T08:59:13.273 回答