我正在使用单元格格式甚至使用绑定数据网格视图的员工ID列来查找另一个数据表中的“员工ID”,并在UNbound“名称”列上返回员工姓名。
Private Sub PartePersonalDataGridView_CellFormatting(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellFormattingEventArgs) Handles DataGridView1.CellFormatting
If DataGridView1.RowCount > 0 AndAlso e.RowIndex > -1 Then
Dim dgvr As DataGridViewRow = DataGridView1.Rows(e.RowIndex)
Dim empID As Integer = CInt(dgvr.Cells(0).Value)
Dim qry = From dr As PersonalObraDataSet.PersonalObRow In _PersonalObraDataSet.PersonalOb _
Where dr.cdTrabajador = empID
If qry.Count > 0 Then
DataGridView1.Rows(e.RowIndex).Cells(1).Value = qry.First.Nombre1
'DataGridView1.Rows(e.RowIndex).Cells(5).Value = qry.First.Nombre2
End If
End If
End Sub
一切正常加载并且每个ID的必需名称都可以正常加载,但是当添加新行时,cellformatting事件会在有可能输入新员工ID之前触发,从而产生DBNull错误,因为它所看到的细胞是空的。
我已经找了一段时间,在单元格编辑完成或单元格离开后,我找不到告诉单元格格式化的方法,或者如果字段Employee ID为空则不格式化单元格。< / p>
答案 0 :(得分:2)
我认为你不能“决定”何时触发cellFormating事件。但如果我理解你的问题,我认为你需要测试cell.value是否为空
如果cell.value为null,则此行代码会出错。
Dim empID As Integer = CInt(dgvr.Cells(0).Value)
所以你需要做这样的事情:
If dgvr.Cells(0).Value IsNot nothing AndAlso dgvr.Cells(0).Value IsNot DbNull.value Then
Dim empID As Integer = CInt(dgvr.Cells(0).Value)
(...)
End If