У меня возникла проблема при обращении к элементу в строке данных.
Когда я выполняю приведенный ниже код, мое намерение состоит в том, чтобы передать представление сетки данных в таблицу данных, выполнить сравнение с данными и выполнить определенный набор событий, однако, когда я запускаю
"Для каждой PaymentRow как DataRow в dtPayments.Rows"
строка я нахожу, что все элементы в строке "DBNull".
Код прерывается на следующей строке
"If PaymentRow.Item("Amount") = PaymentRow.Item("OutstandingBalance") Then"
Это ошибка из-за того, что он не может сравнить два объекта DBNull
Я застрял на этом, так как я просматривал свой код бесчисленное количество раз и до сих пор не могу понять его суть.
Заранее спасибо за помощь ребята
Private Sub btnSave_Click(sender As System.Object, e As System.EventArgs) Handles btnSave.Click
Dim dtPayments As New DataTable
For Each dgColumn As DataGridViewColumn In dgvInvoices.Columns
Dim dc As New DataColumn
dc.ColumnName = dgColumn.Name
dc.DataType = dgColumn.ValueType
dtPayments.Columns.Add(dc)
Next
For Each dgRow As DataGridViewRow In dgvInvoices.Rows
Dim drow As DataRow = dtPayments.NewRow
For Each dCell As DataGridViewCell In dgRow.Cells
If dCell.OwningColumn.Name = "Amount" Then
If IsDBNull(dCell.Value) Then
drow.Item(dCell.OwningColumn.Name) = 0.0
Else
drow.Item(dCell.OwningColumn.Name) = dCell.Value
End If
Else
drow.Item(dCell.OwningColumn.Name) = dCell.Value
End If
Next
dtPayments.Rows.Add(dgRow)
Next
For Each PaymentRow As DataRow In dtPayments.Rows
Dim strInvoiceRef As String = PaymentRow.Item("InvoiceRef").ToString
If PaymentRow.Item("Amount") = PaymentRow.Item("OutstandingBalance") Then
CreateDebit(PaymentRow.Item("Amount"), strInvoiceRef)
CropTrackMod.PaidInvoiceHeader(strInvoiceRef, True)
Dim dtTicketsOnInvoice As DataTable = CropTrackMod.GetDistinctTicketsOnInvoice(strInvoiceRef)
For Each DistinctRow As DataRow In dtTicketsOnInvoice.Rows
'set this list to paid
CropTrackMod.PaidTicket(DistinctRow.Item("TicketRef").ToString(), True)
Next
ElseIf PaymentRow.Item("AmountPaid") < PaymentRow.Item("OutstandingBalance") Then
CreateDebit(PaymentRow.Item("Amount"), strInvoiceRef)
End If
Next
End Sub