2013-07-19 66 views
2

我甚至使用cellformatting來使用綁定的datagridview的Employee ID列在另一個數據表中查找「Employee ID」,並在Unbound「Name」列上返回Employee名稱。如何決定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所需的名稱被加載很好,但是當加入新行中,cellformatting事件觸發之前有機會在新員工ID輸入,給人的DBNull錯誤,因爲它正在查看的單元格是空的。

我查找了一段時間,我找不到方法來告訴cellformatting單元格編輯完成後或單元格離開後觸發,或者如果字段Employee ID爲空,則不格式化單元格。

回答

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 
+0

真棒!這是完美的,我一直在尋找這最後2天。謝謝 – David

+0

@大衛很高興我可以幫助:-) – Chris

相關問題