如何决定何时触发cellformatting事件?

时间:2013-07-19 16:07:25

标签: vb.net datagridview

我正在使用单元格格式甚至使用绑定数据网格视图的员工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>

1 个答案:

答案 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