1

テーブルのエントリが null または空白の場合に、テキスト ボックスにメッセージを挿入する方法を見つけようとしています。次のコードを試しましたが、テキスト ボックスにメッセージが表示されません。コーディングが間違っていることはわかっていますが、それを見ることができません。誰かが私のエラーを指摘してください。ありがとう

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
4

1 に答える 1

3

IsDBNull空白文字列ではなく DBNull 値のみをチェックするため、空白文字列もテストする必要があります。

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

MSDNによると

Expression のデータ型が DBNull 型に評価される場合、IsDBNull は True を返します。それ以外の場合、IsDBNull は False を返します。

以下の @Arion からの興味深いコメントで、彼は string.IsNullOrEmpty を使用することを提案しています。したがって、2回の呼び出しだけでテストを書き直すことができます

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

ただし、DBNull.Value を string.IsNullOrEmpty に渡すと例外がスローされるため、最初に IsDBNull をテストしてから IsNullOrEmpty をテストすることが重要です。

于 2013-10-10T12:27:00.343 に答える