我有一个包含一些列的数据网格:
CategoryID,SubcategoryID,SubcategoryName (隐形,隐形,可见)
创建新子类别时,需要使用CategoryID。
我正在从UI输入新的子类别名称。如果我按ENTER键,它结束当前行编辑,并选择下面的行,而不启动编辑模式(它只是突出显示)。此临时选择使我的SubcategoryName从默认的空单元格值 null 转换为 string.empty 值。
然后,当我尝试将数据发送回数据库时,会导致问题。 Data Adapter引发错误,说CategoryID不能为null。根据我的测试,这是由包含一些不可见垃圾的新行引起的。如果我编辑新行并输入一个普通的子类别名称,那么一切正常(通过检测SubcategoryName不为空的函数插入CategoryID)。
如何确保我的新行数据被删除?
我尝试使用 SendKeys.Send(“{ESC}”)和 DG_SubcategoryEdit.CancelEdit()
发送ESC键答案 0 :(得分:0)
经过一段时间尝试解决我发现的问题后,无论何时你想插入一些东西作为用户放置的内容,你应该总是使用 DefaultValuesNeeded 事件而不是 RowValidated 。如果未提交版本,DefaultValuesNeeded将正确处理删除行的剩余部分。如果您在 RowValidated 中插入任何内容,甚至是null,则该行将被视为已编辑,并将尝试将自身同步到数据库。
令人困惑的部分(可能还有一个错误)是包含null的“已编辑”行在DataGridView底部显示为新的空行,而不是常规的空行。因此,如果您尝试删除它,此行将引发错误,指出您无法删除新行。