我有一个DataGridView
控件的WinForm。它包含CheckBox
列。
我使用CellMouseClick
事件评估评估的当前列索引。无论复选框的逻辑状态如何,单击复选框后将打开另一个表单。
根据新表单中输入的结果,我尝试设置复选框的State
。
不幸的是,我的设置被复选框的默认行为覆盖。
即。如果设置了复选框,最后它将被取消设置,反之亦然。
我的问题是,如果有可能抑制或解决这种行为。可能类似于e.Handled
?
我还使用了CellContentClick
事件但结果是一样的。
答案 0 :(得分:0)
使用活动DataGridView.CellValidating。在链接中有一个示例如何取消当前单元格的事件。 如果有复选框,则仅在用户离开单元格时才会引发此事件。 要解决此问题,请使用事件DataGridView.CurrentCellDirtyStateChanged Event并强制提交更改。 这是example。
答案 1 :(得分:0)
非常感谢您的建议。不幸的是,使用你描述的方式我无法达到预期的效果。我按照建议使用事件CurrentCellDirtyStateChanged和CellValidating。 这种行为在我眼里是奇怪的。 在CurrentCellDirtyStateChanged事件中,我检查了Checkbox的CellValue(它是真的)和之后(它是假的)调用CommitEdit。不会引发CellValidating事件。无法取消活动。
好的,离开表单时 - 单击CheckBox打开了表单 - 我没有离开CheckBox单元格。
所以我尝试通过将CurrentCell设置为另一个单元格来离开CheckBox单元来解决问题。 结果,CellValidating事件被提升。但是设置e.Cancel = true会导致异常。
根据您的建议进行一些额外的尝试后,我可以在不使用CurrentCellDirtyStateChanged和CellValidating事件的情况下实现所需的效果。 现在离开附加Form后,我从Form中获取返回值,根据此值设置CheckBox单元格,将CurrentCell设置为CurrentRow中的下一个单元格并调用RefreshEdit。 CheckBox状态始终设置为正确的值,如果我保留其他表单而不进行更改,则不会更改。 这就是我想要的。 也许这可以帮助其他有类似问题的人。