2013-10-10 5 views
1

Я пытаюсь найти способ вставить сообщение в текстовое поле, если запись в таблице является пустой или пустой. Я пробовал следующий код, но текстовое поле не отображает сообщение. Я знаю, что неправильно закодировал, но не вижу этого. Может кто-нибудь, пожалуйста, укажет на мою ошибку. БлагодаряПроверка db для нулевых значений

Private Sub UserDataGridView_CellContentClick(ByVal sender As System.Object, 
        ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) _ 
            Handles UserDataGridView.CellContentClick 
    Dim value As Object = UserDataGridView.Rows(e.RowIndex).Cells(0).Value 
    Dim NoEdit As Object = UserDataGridView.Rows(e.RowIndex).Cells(1).Value 
    Dim InvCnt As Object = UserDataGridView.Rows(e.RowIndex).Cells(2).Value 
    Dim InvAddress As Object = UserDataGridView.Rows(e.RowIndex).Cells(3).Value 
    Dim Email As Object = UserDataGridView.Rows(e.RowIndex).Cells(4).Value 
    Dim Tel As Object = UserDataGridView.Rows(e.RowIndex).Cells(5).Value 
    Dim Fax As Object = UserDataGridView.Rows(e.RowIndex).Cells(6).Value 

    txtCustomerActive.Text = CType(value, String) 
    txtCustomerNoedit.Text = CType(NoEdit, String) 
    txtInvoiceContact.Text = CType(InvCnt, String) 
    txtInvoiceAddress.Text = CType(InvAddress, String) 
    txtEmail.Text = CType(Email, String) 
    txtCustomerTelephone.Text = CType(Tel, String) 

    If Fax Is Nothing OrElse IsDBNull(Fax) Then 
    txtCustomerFax.Text = "No Number on record" ' Display if no record 
    Else 
    txtCustomerFax.Text = CType(Fax, String) 
    End If 

    ' txtCustomerFax.Text = CType(Fax, String) 
End Sub 

ответ

3

Вам необходимо проверить также для пустой строки, поскольку IsDBNull проверяет только для значений DBNull, а не для пустой строки

If Fax Is Nothing OrElse IsDBNull(Fax) OrElse Fax = string.Empty Then 
    ..... 

MSDN says

IsDBNull возвращает истину, если данные тип выражения выражает значение DBNull; в противном случае IsDBNull возвращает False.

Интересный комментарий ниже от @Arion, он предлагает использовать string.IsNullOrEmpty. Таким образом, вы можете переписать тест только два звонков

If IsDBNull(Fax) OrElse string.IsNullOrEmpty(Fax) then 

Однако важно, чтобы проверить сначала для IsDBNull, а затем для IsNullOrEmpty, потому что прохождение DBNull.Value к string.IsNullOrEmpty бросает исключение

+0

Почему ты не используйте 'string.IsNullOrEmpty()'? И повторно запустите строки в 'If string.IsNullOrEmpty (Fax) OrElse IsDBNull (Fax) Then' – Arion

+0

@Arion вы правы, но это важно для порядка тестирования. Если у вас есть DBNull.Value в факс, вы должны сначала проверить для IsDBNull, а затем для string.IsNullOrEmpty – Steve

+0

+1 для string.IsNullOrEmpty. – Neolisk

Смежные вопросы