Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 为什么在单击与其事件关联的按钮时组合框会抛出错误_Vb.net_Visual Studio_Visual Studio 2012 - Fatal编程技术网

Vb.net 为什么在单击与其事件关联的按钮时组合框会抛出错误

Vb.net 为什么在单击与其事件关联的按钮时组合框会抛出错误,vb.net,visual-studio,visual-studio-2012,Vb.net,Visual Studio,Visual Studio 2012,程序的基本运行:连接到数据库。组合框由术语列表填充,选择术语后,按下“获取术语”按钮,该按钮填充列表视图,然后在表单底部的文本框中返回到期总余额 组合框将被填充,但当按下btn时,catch ex会沿着无法转换为整数的字符串行抛出一个错误(发生在表单设计代码上)。我不太确定我错在哪里了。它似乎在任何地方都抓不到任何东西 我将在下面包含代码 Imports Payables 公开课表格1 Dim invoiceList As List(Of Invoices) Dim termList As L

程序的基本运行:连接到数据库。组合框由术语列表填充,选择术语后,按下“获取术语”按钮,该按钮填充列表视图,然后在表单底部的文本框中返回到期总余额

组合框将被填充,但当按下btn时,catch ex会沿着无法转换为整数的字符串行抛出一个错误(发生在表单设计代码上)。我不太确定我错在哪里了。它似乎在任何地方都抓不到任何东西

我将在下面包含代码

Imports Payables
公开课表格1

Dim invoiceList As List(Of Invoices)
Dim termList As List(Of Terms)

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    LoadComboBoxes()
End Sub

Private Sub LoadComboBoxes()
    termList = TermsDB.GetTermsList
    cboTerms.DataSource = termList
    cboTerms.ValueMember = "TermsID"
    cboTerms.DisplayMember = "Description"

End Sub



Private Sub btnGetInvoice_Click(sender As Object, e As EventArgs) Handles btnGetInvoice.Click
    Dim invoiceList As List(Of Invoices)
    Dim TermsID = CInt(cboTerms.SelectedValue)


    Try
        invoiceList = InvoicesDB.FindInvoiceByID(TermsID)
        txtTotalBalanceDue.Text = FormatCurrency(InvoicesDB.GetBalanceDue())
        If invoiceList.Count > 0 Then
            Dim invoice As Invoices
            For i = 0 To invoiceList.Count - 1
                invoice = invoiceList(i)
                lvInvoices.Items.Add(invoice.InvoiceID)
                lvInvoices.Items(i).SubItems.Add(invoice.VendorID)
                lvInvoices.Items(i).SubItems.Add(invoice.InvoiceNumber)
                lvInvoices.Items(i).SubItems.Add(invoice.InvoiceDate)
                lvInvoices.Items(i).SubItems.Add(invoice.InvoiceTotal)
                lvInvoices.Items(i).SubItems.Add(invoice.PaymentTotal)
                lvInvoices.Items(i).SubItems.Add(invoice.CreditTotal)
                lvInvoices.Items(i).SubItems.Add(invoice.TermsID)
                lvInvoices.Items(i).SubItems.Add(invoice.DueDate)
                lvInvoices.Items(i).SubItems.Add(invoice.PaymentDate)

            Next
        Else
            MessageBox.Show("There is no info on this account")
            Me.Close()
        End If
    Catch ex As Exception
        Throw ex
        Me.Close()
    End Try


End Sub




Private Sub btnExit_Click(sender As Object, e As EventArgs) Handles btnExit.Click
    Me.Close()
End Sub
末级

Public Class Invoices
Dim m_InvoiceID As Integer
Dim m_VendorID As Integer
Dim m_InvoiceNumber As String
Dim m_InvoiceDate As Date
Dim m_InvoiceTotal As Decimal
Dim m_PaymentTotal As Decimal
Dim m_CreditTotal As Decimal
Dim m_TermsID As Integer
Dim m_DueDate As Date
Dim m_PaymentDate As Date


Public Sub New()

End Sub

Public Property InvoiceID() As Integer
    Get
        Return m_InvoiceID
    End Get
    Set(value As Integer)
        m_InvoiceID = value

    End Set
End Property

Public Property VendorID() As Integer
    Get
        Return m_VendorID
    End Get
    Set(value As Integer)
        m_VendorID = value

    End Set
End Property

Public Property InvoiceNumber() As String
    Get
        Return m_InvoiceNumber
    End Get
    Set(value As String)
        m_InvoiceNumber = value

    End Set
End Property

Public Property InvoiceDate() As Date
    Get
        Return m_InvoiceDate
    End Get
    Set(value As Date)
        m_InvoiceDate = value

    End Set
End Property

Public Property InvoiceTotal() As Decimal
    Get
        Return m_InvoiceTotal
    End Get
    Set(value As Decimal)
        m_InvoiceTotal = value

    End Set
End Property

Public Property PaymentTotal() As Integer
    Get
        Return m_PaymentTotal
    End Get
    Set(value As Integer)
        m_PaymentTotal = value

    End Set
End Property

Public Property CreditTotal() As Integer
    Get
        Return m_CreditTotal
    End Get
    Set(value As Integer)
        m_CreditTotal = value

    End Set
End Property

Public Property TermsID() As Integer
    Get
        Return m_TermsID
    End Get
    Set(value As Integer)
        m_TermsID = value

    End Set
End Property


Public Property DueDate() As Date
    Get
        Return m_DueDate
    End Get
    Set(value As Date)
        m_DueDate = value

    End Set
End Property

Public Property PaymentDate() As Date
    Get
        Return m_PaymentDate
    End Get
    Set(value As Date)
        m_PaymentDate = value

    End Set
End Property




'Create a function BalanceDue to return the BalanceDue
Public Function GetBalanceDue() As Decimal
    Return m_InvoiceTotal - m_PaymentTotal - m_CreditTotal
End Function
Imports System.Data.SqlClient
Public Class Terms
Dim m_TermsID As Integer
Dim m_Description As String
Dim m_DueDays As Integer

Public Sub New()

End Sub

Public Property TermsID() As Integer
    Get
        Return m_TermsID
    End Get
    Set(ByVal value As Integer)
        m_TermsID = value
    End Set
End Property

Public Property Description() As String
    Get
        Return m_Description
    End Get
    Set(ByVal value As String)
        m_Description = value
    End Set
End Property

Public Property DueDays() As Integer
    Get
        Return m_DueDays
    End Get
    Set(ByVal value As Integer)
        m_DueDays = value
    End Set
End Property
Imports System.Data.SqlClient
末级

Public Class Invoices
Dim m_InvoiceID As Integer
Dim m_VendorID As Integer
Dim m_InvoiceNumber As String
Dim m_InvoiceDate As Date
Dim m_InvoiceTotal As Decimal
Dim m_PaymentTotal As Decimal
Dim m_CreditTotal As Decimal
Dim m_TermsID As Integer
Dim m_DueDate As Date
Dim m_PaymentDate As Date


Public Sub New()

End Sub

Public Property InvoiceID() As Integer
    Get
        Return m_InvoiceID
    End Get
    Set(value As Integer)
        m_InvoiceID = value

    End Set
End Property

Public Property VendorID() As Integer
    Get
        Return m_VendorID
    End Get
    Set(value As Integer)
        m_VendorID = value

    End Set
End Property

Public Property InvoiceNumber() As String
    Get
        Return m_InvoiceNumber
    End Get
    Set(value As String)
        m_InvoiceNumber = value

    End Set
End Property

Public Property InvoiceDate() As Date
    Get
        Return m_InvoiceDate
    End Get
    Set(value As Date)
        m_InvoiceDate = value

    End Set
End Property

Public Property InvoiceTotal() As Decimal
    Get
        Return m_InvoiceTotal
    End Get
    Set(value As Decimal)
        m_InvoiceTotal = value

    End Set
End Property

Public Property PaymentTotal() As Integer
    Get
        Return m_PaymentTotal
    End Get
    Set(value As Integer)
        m_PaymentTotal = value

    End Set
End Property

Public Property CreditTotal() As Integer
    Get
        Return m_CreditTotal
    End Get
    Set(value As Integer)
        m_CreditTotal = value

    End Set
End Property

Public Property TermsID() As Integer
    Get
        Return m_TermsID
    End Get
    Set(value As Integer)
        m_TermsID = value

    End Set
End Property


Public Property DueDate() As Date
    Get
        Return m_DueDate
    End Get
    Set(value As Date)
        m_DueDate = value

    End Set
End Property

Public Property PaymentDate() As Date
    Get
        Return m_PaymentDate
    End Get
    Set(value As Date)
        m_PaymentDate = value

    End Set
End Property




'Create a function BalanceDue to return the BalanceDue
Public Function GetBalanceDue() As Decimal
    Return m_InvoiceTotal - m_PaymentTotal - m_CreditTotal
End Function
Imports System.Data.SqlClient
Public Class Terms
Dim m_TermsID As Integer
Dim m_Description As String
Dim m_DueDays As Integer

Public Sub New()

End Sub

Public Property TermsID() As Integer
    Get
        Return m_TermsID
    End Get
    Set(ByVal value As Integer)
        m_TermsID = value
    End Set
End Property

Public Property Description() As String
    Get
        Return m_Description
    End Get
    Set(ByVal value As String)
        m_Description = value
    End Set
End Property

Public Property DueDays() As Integer
    Get
        Return m_DueDays
    End Get
    Set(ByVal value As Integer)
        m_DueDays = value
    End Set
End Property
Imports System.Data.SqlClient
公共类发票

Public Shared Function FindInvoiceByID(ByVal TermsID) As List(Of Invoices)

    Dim invoice As New Invoices
    Dim connection As SqlConnection = PayablesDB.GetConnection
    Dim invoiceList As New List(Of Invoices)
    Dim selectStatement As String = "SELECT InvoiceID, VendorID, InvoiceNumber, InvoiceDate, InvoiceTotal,PaymentTotal,CreditTotal,TermsID,DueDate,PaymentDate FROM Invoices WHERE TermsID=@TermsID"
    Dim selectCommand As New SqlCommand(selectStatement, connection)
    'add the parameter to the parameter collection of the command object
    selectCommand.Parameters.AddWithValue("@TermsID", TermsID)
    Try
        connection.Open()
        Dim reader As SqlDataReader = selectCommand.ExecuteReader
        If reader.Read Then
            invoice.InvoiceID = CInt(reader("InvoiceID"))
            invoice.VendorID = CInt(reader("VendorID"))
            invoice.InvoiceNumber = CInt(reader("InvoiceNumber"))
            invoice.InvoiceDate = CDate(reader("InvoiceDate"))
            invoice.InvoiceTotal = CDec(reader("InvoiceTotal"))
            invoice.PaymentTotal = CDec(reader("PaymentTotal"))
            invoice.CreditTotal = CDec(reader("CreditTotal"))
            invoice.TermsID = CInt(reader("TermsID"))
            invoice.DueDate = CDate(reader("DueDate"))
            invoice.PaymentDate = CDate(reader("PaymentDate"))

        Else
            'that means the invoice is not found
            invoice = Nothing 'this means the vendor object no longer exists
        End If
        reader.Close()
        connection.Close()
    Catch ex As Exception
        Throw ex
    End Try
    Return invoiceList
End Function

Public Shared Function GetBalanceDue() As Decimal 'aggregate 
    Dim connection As SqlConnection = PayablesDB.GetConnection
    Dim selectCommand As New SqlCommand()
    selectCommand.Connection = connection
    selectCommand.CommandText =
        "SELECT SUM(InvoiceTotal - PaymentTotal - CreditTotal) " &
        "AS BalanceDue FROM Invoices" &
        "WHERE TermsID=@TermsID"
    connection.Open()
    Dim balanceDue As Decimal = CDec(selectCommand.ExecuteScalar)  
    connection.Close() 
    Return balanceDue
End Function
末级

Public Class Invoices
Dim m_InvoiceID As Integer
Dim m_VendorID As Integer
Dim m_InvoiceNumber As String
Dim m_InvoiceDate As Date
Dim m_InvoiceTotal As Decimal
Dim m_PaymentTotal As Decimal
Dim m_CreditTotal As Decimal
Dim m_TermsID As Integer
Dim m_DueDate As Date
Dim m_PaymentDate As Date


Public Sub New()

End Sub

Public Property InvoiceID() As Integer
    Get
        Return m_InvoiceID
    End Get
    Set(value As Integer)
        m_InvoiceID = value

    End Set
End Property

Public Property VendorID() As Integer
    Get
        Return m_VendorID
    End Get
    Set(value As Integer)
        m_VendorID = value

    End Set
End Property

Public Property InvoiceNumber() As String
    Get
        Return m_InvoiceNumber
    End Get
    Set(value As String)
        m_InvoiceNumber = value

    End Set
End Property

Public Property InvoiceDate() As Date
    Get
        Return m_InvoiceDate
    End Get
    Set(value As Date)
        m_InvoiceDate = value

    End Set
End Property

Public Property InvoiceTotal() As Decimal
    Get
        Return m_InvoiceTotal
    End Get
    Set(value As Decimal)
        m_InvoiceTotal = value

    End Set
End Property

Public Property PaymentTotal() As Integer
    Get
        Return m_PaymentTotal
    End Get
    Set(value As Integer)
        m_PaymentTotal = value

    End Set
End Property

Public Property CreditTotal() As Integer
    Get
        Return m_CreditTotal
    End Get
    Set(value As Integer)
        m_CreditTotal = value

    End Set
End Property

Public Property TermsID() As Integer
    Get
        Return m_TermsID
    End Get
    Set(value As Integer)
        m_TermsID = value

    End Set
End Property


Public Property DueDate() As Date
    Get
        Return m_DueDate
    End Get
    Set(value As Date)
        m_DueDate = value

    End Set
End Property

Public Property PaymentDate() As Date
    Get
        Return m_PaymentDate
    End Get
    Set(value As Date)
        m_PaymentDate = value

    End Set
End Property




'Create a function BalanceDue to return the BalanceDue
Public Function GetBalanceDue() As Decimal
    Return m_InvoiceTotal - m_PaymentTotal - m_CreditTotal
End Function
Imports System.Data.SqlClient
Public Class Terms
Dim m_TermsID As Integer
Dim m_Description As String
Dim m_DueDays As Integer

Public Sub New()

End Sub

Public Property TermsID() As Integer
    Get
        Return m_TermsID
    End Get
    Set(ByVal value As Integer)
        m_TermsID = value
    End Set
End Property

Public Property Description() As String
    Get
        Return m_Description
    End Get
    Set(ByVal value As String)
        m_Description = value
    End Set
End Property

Public Property DueDays() As Integer
    Get
        Return m_DueDays
    End Get
    Set(ByVal value As Integer)
        m_DueDays = value
    End Set
End Property
Imports System.Data.SqlClient
末级

Public Class Invoices
Dim m_InvoiceID As Integer
Dim m_VendorID As Integer
Dim m_InvoiceNumber As String
Dim m_InvoiceDate As Date
Dim m_InvoiceTotal As Decimal
Dim m_PaymentTotal As Decimal
Dim m_CreditTotal As Decimal
Dim m_TermsID As Integer
Dim m_DueDate As Date
Dim m_PaymentDate As Date


Public Sub New()

End Sub

Public Property InvoiceID() As Integer
    Get
        Return m_InvoiceID
    End Get
    Set(value As Integer)
        m_InvoiceID = value

    End Set
End Property

Public Property VendorID() As Integer
    Get
        Return m_VendorID
    End Get
    Set(value As Integer)
        m_VendorID = value

    End Set
End Property

Public Property InvoiceNumber() As String
    Get
        Return m_InvoiceNumber
    End Get
    Set(value As String)
        m_InvoiceNumber = value

    End Set
End Property

Public Property InvoiceDate() As Date
    Get
        Return m_InvoiceDate
    End Get
    Set(value As Date)
        m_InvoiceDate = value

    End Set
End Property

Public Property InvoiceTotal() As Decimal
    Get
        Return m_InvoiceTotal
    End Get
    Set(value As Decimal)
        m_InvoiceTotal = value

    End Set
End Property

Public Property PaymentTotal() As Integer
    Get
        Return m_PaymentTotal
    End Get
    Set(value As Integer)
        m_PaymentTotal = value

    End Set
End Property

Public Property CreditTotal() As Integer
    Get
        Return m_CreditTotal
    End Get
    Set(value As Integer)
        m_CreditTotal = value

    End Set
End Property

Public Property TermsID() As Integer
    Get
        Return m_TermsID
    End Get
    Set(value As Integer)
        m_TermsID = value

    End Set
End Property


Public Property DueDate() As Date
    Get
        Return m_DueDate
    End Get
    Set(value As Date)
        m_DueDate = value

    End Set
End Property

Public Property PaymentDate() As Date
    Get
        Return m_PaymentDate
    End Get
    Set(value As Date)
        m_PaymentDate = value

    End Set
End Property




'Create a function BalanceDue to return the BalanceDue
Public Function GetBalanceDue() As Decimal
    Return m_InvoiceTotal - m_PaymentTotal - m_CreditTotal
End Function
Imports System.Data.SqlClient
Public Class Terms
Dim m_TermsID As Integer
Dim m_Description As String
Dim m_DueDays As Integer

Public Sub New()

End Sub

Public Property TermsID() As Integer
    Get
        Return m_TermsID
    End Get
    Set(ByVal value As Integer)
        m_TermsID = value
    End Set
End Property

Public Property Description() As String
    Get
        Return m_Description
    End Get
    Set(ByVal value As String)
        m_Description = value
    End Set
End Property

Public Property DueDays() As Integer
    Get
        Return m_DueDays
    End Get
    Set(ByVal value As Integer)
        m_DueDays = value
    End Set
End Property
Imports System.Data.SqlClient
公共类术语

Public Shared Function GetTermsList() As List(Of Terms)
    Dim termList As New List(Of Terms)
    Dim connection As SqlConnection = PayablesDB.GetConnection
    Dim selectStatement As String =
        "SELECT TermsID,Description,DueDays " &
        "FROM Terms " &
        "ORDER BY Description"
    Dim selectCommand As New SqlCommand(selectStatement, connection)

    Try
        connection.Open()
        Dim reader As SqlDataReader = selectCommand.ExecuteReader()
        Dim term As Terms
        Do While reader.Read
            term = New Terms
            term.TermsID = CInt(reader("TermsID"))
            term.Description = reader("Description").ToString
            term.DueDays = CInt(reader("DueDays"))
            termList.Add(term)
        Loop
        reader.Close()
    Catch ex As SqlException
        Throw ex
    Finally
        connection.Close()
    End Try
    Return termList
End Function

End Class

我认为您的按钮正在触发页面加载事件,并且您正在丢失所选的combobox值

Public Class Invoices
Dim m_InvoiceID As Integer
Dim m_VendorID As Integer
Dim m_InvoiceNumber As String
Dim m_InvoiceDate As Date
Dim m_InvoiceTotal As Decimal
Dim m_PaymentTotal As Decimal
Dim m_CreditTotal As Decimal
Dim m_TermsID As Integer
Dim m_DueDate As Date
Dim m_PaymentDate As Date


Public Sub New()

End Sub

Public Property InvoiceID() As Integer
    Get
        Return m_InvoiceID
    End Get
    Set(value As Integer)
        m_InvoiceID = value

    End Set
End Property

Public Property VendorID() As Integer
    Get
        Return m_VendorID
    End Get
    Set(value As Integer)
        m_VendorID = value

    End Set
End Property

Public Property InvoiceNumber() As String
    Get
        Return m_InvoiceNumber
    End Get
    Set(value As String)
        m_InvoiceNumber = value

    End Set
End Property

Public Property InvoiceDate() As Date
    Get
        Return m_InvoiceDate
    End Get
    Set(value As Date)
        m_InvoiceDate = value

    End Set
End Property

Public Property InvoiceTotal() As Decimal
    Get
        Return m_InvoiceTotal
    End Get
    Set(value As Decimal)
        m_InvoiceTotal = value

    End Set
End Property

Public Property PaymentTotal() As Integer
    Get
        Return m_PaymentTotal
    End Get
    Set(value As Integer)
        m_PaymentTotal = value

    End Set
End Property

Public Property CreditTotal() As Integer
    Get
        Return m_CreditTotal
    End Get
    Set(value As Integer)
        m_CreditTotal = value

    End Set
End Property

Public Property TermsID() As Integer
    Get
        Return m_TermsID
    End Get
    Set(value As Integer)
        m_TermsID = value

    End Set
End Property


Public Property DueDate() As Date
    Get
        Return m_DueDate
    End Get
    Set(value As Date)
        m_DueDate = value

    End Set
End Property

Public Property PaymentDate() As Date
    Get
        Return m_PaymentDate
    End Get
    Set(value As Date)
        m_PaymentDate = value

    End Set
End Property




'Create a function BalanceDue to return the BalanceDue
Public Function GetBalanceDue() As Decimal
    Return m_InvoiceTotal - m_PaymentTotal - m_CreditTotal
End Function
Imports System.Data.SqlClient
Public Class Terms
Dim m_TermsID As Integer
Dim m_Description As String
Dim m_DueDays As Integer

Public Sub New()

End Sub

Public Property TermsID() As Integer
    Get
        Return m_TermsID
    End Get
    Set(ByVal value As Integer)
        m_TermsID = value
    End Set
End Property

Public Property Description() As String
    Get
        Return m_Description
    End Get
    Set(ByVal value As String)
        m_Description = value
    End Set
End Property

Public Property DueDays() As Integer
    Get
        Return m_DueDays
    End Get
    Set(ByVal value As Integer)
        m_DueDays = value
    End Set
End Property
Imports System.Data.SqlClient
您是否将文本值作为组合框中的第一个选项?这将导致您看到的转换错误

避免在回发时使用以下内容绑定combobox

If ispostback = false Then
LoadComboBoxes()
End If

正在执行哪个捕获?我看到那里有3个。我觉得你发的代码太多了我不得不承认这太多了。你需要花一点时间来缩小实际问题的范围。如果您不知道如何执行此操作,请阅读调试实践。很难跟踪代码中的任何内容,因为您的声明不包括类型:
FindInvoiceByID(ByVal TermsID)
。此时我看到的唯一地方是
Dim TermsID=CInt(cboTerms.SelectedValue)
。您的
SelectedValue
可能不是您所想的。此外,为什么不在catch中放置一些调试,而不是不必要地重新抛出异常呢?在vb文件的顶部编写
选项Strict On
选项Explicit On
选项Explicit Off
。这将在运行前的编译时捕获大多数问题。在每个
catch
块的第一行上放置一个断点,以标识引发异常的代码块。然后在相关的
Try
块的第一行中放置一个断点,然后再次运行调试器,并使用逐步监视何时、哪一行代码、哪一个变量导致异常……是的,有一个文本值。例如,在组合框中,它将列出净到期10天、净到期20天等。您能否在btnGetInvoice\u单击子例程处设置断点,然后在“监视”窗口中显示CInt(cboTerms.SelectedValue)?这一行是我要排除的第一个错误源。如果这是错误,我想您可以使用isPostBack=false来避免它。