datagridview获得焦点时丢失单元格数据

时间:2015-03-24 12:52:44

标签: vb.net winforms datagridview

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

我在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

这个测试告诉我新值是null,它正在删除第一条记录(我已经知道) - 仍然不知道如何解决它!

编辑#3 更多解释:

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

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

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

此外,我在另一个表单上有另一个dgv,使用_CellStateChanged事件绑定完全相同的方式,所有内容都会正常触发并保存。我已经完成了两种形式的设计师编码,我找不到两者之间的任何设置差异。

我在这里失去了理智!非常感谢任何帮助!

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

也许我理解,如果U save

,焦点单元格中的语句不会保存在数据库表中 这个问题我解决了 将空白文本框控件添加到包含dgv并命名为txtFocus的表单中 放置它行为dgv并使用其属性发送回来或 由屏幕底部引起,所以不要显示它 然后 在保存之前 白色然后: txtFocus.Focus() sendKeys.send( “{F2}”)

仅在这种情况下,U可以将数据保存在dgv中更改的最后一个单元格内 最好的注册 阿什拉夫