我知道我需要提供一些代码,但我不确定我应该展示什么,所以如果可以,请建议 .
我在Windows窗体上有一个绑定的datagridview . 在表单加载并且datagridview获得焦点(在鼠标单击时)后,第一行(和特定列)丢失它的数据,将单元格的状态更改为脏 . 在我点击将dgv置于焦点的位置无关紧要,该行/列始终为空白 . 什么事件被触发可能会导致数据丢失?
同样,任何关于发布什么代码的建议都会很棒 . 我知道这有助于回答这个问题 .
Edit #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
Edit #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,它是删除第一条记录(我已经知道) - 仍然不知道如何解决它!
Edit #3 更多解释:
目前,我正在处理的唯一事件是form_Load,它使用tableadapter为我的(绑定)数据集填充dgv . 然后我将dgv绑定到绑定源 .
我知道这个错误只发生在dgv获得焦点时(我通过在表单加载时将焦点设置为dgv来测试) . 我在这个表单上有一系列复选框/列表框/文本框,允许用户动态过滤dgv(后端,我过滤绑定源) . 如果我首先过滤dgv,那么当我将焦点移动到dgv时,同一行和同一列(它们的索引不会改变)会保持它的值 . 当我清除过滤器,同一行和同一列时,再次丢失它的数据 .
我确实在用户进行编辑后触发_CellStateChanged事件 . 目前,它已被注释掉,因此数据丢失不会反映在我的数据集中 .
另外,我在另一个表单上有另一个dgv,以完全相同的方式绑定_CellStateChanged事件,所有内容都会正常触发并保存 . 我已经完成了两种形式的设计师编码,我找不到两者之间的任何设置差异 .
我在这里失去了理智!任何帮助是极大的赞赏!
2 回答
我决定从头开始重新创建表单,并且不再出现此错误 . 我比较了这两组代码,但却找不到它们之间的差异 . 如果将来有人遇到此问题,请节省时间并重新创建与dgv相关的所有对象 .
也许我理解,如果U保存,焦点单元格中的语句不会保存在数据库表中
这个问题我解决了添加空白文本框控件到你的窗体,其中包含dgv和命名txtFocus放置它行为dgv并使用其属性发送回来或由屏幕底部诱发所以不要显示它然后保存白色然后:txtFocus.Focus ()sendKeys.send(“”)
仅在这种情况下,U可以将数据保存在dgv最佳Reg Ashraf中更改的最后一个单元格内