数据网格视图获得焦点时丢失单元格数据



我知道我需要提供一些代码,但我不确定我应该显示什么,所以如果可以的话,请提出建议。

我在Windows窗体上有一个绑定的datagridview。在加载窗体并使datagridview获得焦点(单击鼠标)后,第一行(和特定列)将丢失数据,从而将单元格的状态更改为脏。无论我点击哪里使dgv成为焦点,那一行/那一列总是空白的。是什么事件触发了数据丢失?

同样,任何关于发布什么代码的建议都是很好的。我知道这将有助于回答这个问题。

编辑#1这段代码是一个无限循环,但我添加它是为了回应一条评论:

 Private Sub dgQCOrders_CellPainting(sender As Object, e As DataGridViewCellPaintingEventArgs) Handles dgQCOrders.CellPainting
    If e.RowIndex = 0 And e.ColumnIndex = 9 Then
        If e.FormattedValue <> e.Value Then
            MsgBox("Changed")
        Else
            MsgBox("Unchanged")
        End If
    End If
End Sub

编辑#2

Private Sub dgQCOrders_CellPainting(sender As Object, e As DataGridViewCellPaintingEventArgs) Handles dgQCOrders.CellPainting
    If e.RowIndex = 0 And e.ColumnIndex = 9 Then
        If e.FormattedValue <> e.Value Then
            Me.txtTest.Text = "Changed"
        Else
            Me.txtTest.Text = "Unchanged"
        End If
    End If
End Sub

这个测试告诉我新的值是空的,它正在删除第一条记录(我已经知道了)——仍然不知道如何修复它!

编辑#3更多解释:

目前,我处理的唯一事件是form_Load,它使用我的(绑定的)数据集的表适配器填充dgv。然后我将dgv绑定到绑定源。

我知道这个错误只有在dgv获得焦点时才会发生(我通过在表单加载时将焦点设置为dgv来测试这一点)。我在这个表单上也有一系列复选框/listboxes/textboxes,允许用户动态过滤dgv(后端,我过滤绑定源)。如果我首先过滤dgv,那么当我将焦点移动到dgv时,同一行和同一列(它们的索引不变)会保持它的值。当我清除过滤器时,同一行同一列会再次丢失数据。

在用户进行编辑后,我确实触发了_CellStateChanged事件。目前,它已被注释掉,因此数据丢失不会反映在我的数据集中。

此外,我有另一个不同形式的dgv,以完全相同的方式绑定,带有_CellStateChanged事件,所有内容都会正确地激发和保存。我已经完成了两个表单的设计器编码,我找不到两者之间的任何设置差异。

我在这里疯了!非常感谢您的帮助!

我决定从头开始重新创建表单,这个错误不再发生。我比较了这两组代码,没有发现它们之间有任何差异。如果将来有人遇到这个问题,请节省时间并重新创建与dgv相关的所有对象。

也许我知道,如果U保存,焦点单元格中的语句不会保存在数据库表中

我解决了这个问题将空白文本框控件添加到包含dgv并命名为txtFocus的表单中将其放置在dgv之后并使用其属性send-to-back或由屏幕底部唤起,因此不要显示然后保存前白色,然后:txt焦点.Focus()sendKeys.send("{F2}")

只有在这种情况下,U才能将数据保存在dgv中更改的最后一个单元格中最佳RegAshraf

相关内容

最新更新