形势 DataGridView中删除:错列被绑定到DataAdapter的
我正在写使用C#在VS2013与.NET4.0 WinForms应用程序。
我有一个datagridview,我绑定到一个DataAdapter链接到MySQL表。我正在使用DataAdapter的Update方法执行更新。由于MySQL表中日期和布尔值的非常规处理,我设置了自己的SQL命令,而不是使用CommandBuilder。这些参数在调用Update之前由参数设置。我在RowValidated上调用Update。
插入和修改此工作正常。
问题:
在DataGridView,当用户选择单行,我希望他们能够击中删除和有从电网和数据库都删除的行。当我尝试这一行时,该行从datagridview中消失,当然光标移动到另一行。但数据库被删除的行是光标所在的新的datagridview行。这几乎肯定是因为我使用datagridview.CurrentRow来设置删除命令的参数,并且我认为在这个阶段当前行确实已经改变了。
问题:
怎样更改这项安排,以便删除将正常工作?很明显,根本问题是在数据库更新发生之前该行已从网格中消失,但我不知道如何解决该问题。我怀疑这个解决方案可能在于通过不同的事件处理事情,但我不确定是哪一个。
不要直接从datgridview中删除数据。从数据表中删除数据,datagridview应该自动更新。 DataGridview和dataTable的行号应该始终相同。 – jdweng
谢谢@jdweng。因此,现在在UserDeletingRow中,我手动删除所需的行,重新填充适配器,然后刷新datagridview。这_appears_很好,所需的行从网格中消失。但是,在数据库中,所需的行已经被_and_光标所在的新行删除。后者可能是因为RowValidated仍然被触发,导致适配器的更新。那么,我该如何a)提示Update方法来处理删除所需的行,或者b)手动删除所需的行,并阻止Update执行后续的删除。 – ifinlay
您已绕过命令构建器。命令生成器执行Select命令并创建三个附加命令:更新,插入和删除。我认为你需要全部4条命令才能使更新正常工作。更新需要能够删除行。 – jdweng