バインドされたデータグリッドビューの従業員 ID 列を使用して、別のデータテーブルで「従業員 ID」を検索し、バインドされていない「名前」列で従業員名を返すために、cellformatting を使用しています。
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 に必要な名前が正常にロードされますが、新しい行が追加されると、新しい従業員 ID を入力する前に cellformatting イベントが発生し、DBNull エラーが発生します。見て空です。
しばらく探しましたが、セルの編集が完了した後またはセルを離れた後にセルフォーマットを起動する方法、またはフィールド従業員 ID が空の場合にセルをフォーマットしないようにする方法が見つかりません。