需要帮助在VB.net中编辑客户信息

时间:2019-07-14 18:00:17

标签: vb.net c#-to-vb.net

我试图使用我的C#项目来编辑客户,以了解如何在VB.net中实现此代码。该项目成功地添加了客户,但是当要编辑客户时,事情就变得更加复杂了,因为我需要获取所选行的ID并将其传递给字符串。我有MainForm.vb,当我单击“编辑”时可以打开CustomerForm.vb。当CustomerForm.vb打开时,它无法显示客户的信息。我不确定FillDataTable()函数是否是必需的,我想知道对此是否有所改进。

CustomerForm.vb

Imports System.Data.SqlClient

Public Class CustomerForm
Private objConnection As SqlConnection
Public objDataTable As DataTable = New DataTable()
Public objSqlCommand As SqlCommand = New SqlCommand()
Public editMode As Boolean = False
Public id As String = ""
Public FName As String = ""
Public LName As String = ""
Public PhNumber As String = ""

Public ReadOnly Property Connection As SqlConnection
    Get
        Return Me.objConnection
    End Get
End Property

Dim CS As String = ("server=CASHAMERICA;Trusted_Connection=yes;database=ProductsDatabase2; connection timeout=30")

Private Sub btnSave_Click(sender As Object, e As EventArgs) Handles btnSave.Click

    Try
        If editMode = False Then
            If txtFirstName.Text = "" Then
                MessageBox.Show("First Name Is required")
            ElseIf txtLastName.Text = "" Then
                MessageBox.Show("Last Name Is required")
            Else
                Dim con As New SqlConnection(CS)
                con.Open()
                Dim cmd As New SqlCommand("INSERT INTO Customers(FIrstName,LastName,PhoneNumber) VALUES(@FName, @LName, @PhNumber)", con)
                cmd.Parameters.AddWithValue("@FName", txtFirstName.Text)
                cmd.Parameters.AddWithValue("@LName", txtLastName.Text)
                cmd.Parameters.AddWithValue("@PhNumber", txtPhoneNumber.Text)
                cmd.ExecuteNonQuery()
                MessageBox.Show("Customer has been added!")
                con.Close()
            End If
        ElseIf editMode = True Then
            If txtFirstName.Text = "" Then
                MessageBox.Show("First Name Is required")
            ElseIf txtLastName.Text = "" Then
                MessageBox.Show("Last Name Is required")
            Else
                Dim con As New SqlConnection(CS)
                con.Open()
                Dim cmd As New SqlCommand("UPDATE Customers SET FIrstName = @FName, LastName = @LName, PhoneNumber = @PhNumber WHERE Id = @Id", con)
                cmd.Parameters.AddWithValue("@Id", id)
                cmd.Parameters.AddWithValue("@FName", txtFirstName.Text)
                cmd.Parameters.AddWithValue("@LName", txtLastName.Text)
                cmd.Parameters.AddWithValue("@PhNumber", txtPhoneNumber.Text)
                cmd.ExecuteNonQuery()
                MessageBox.Show("Customer has been edited.")
                con.Close()
            End If
        End If

    Catch ex As Exception
        MessageBox.Show(Me, ex.Message, "Save Failed", MessageBoxButtons.OK, MessageBoxIcon.Error)
    End Try

End Sub

Private Sub btnCancel_Click(sender As Object, e As EventArgs) Handles btnCancel.Click
    Me.Close()
End Sub

Private Sub CustomerForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    If editMode = False Then
        GetId()
    Else
        textId.Text = id
        txtFirstName.Text = FName
        txtLastName.Text = LName
        txtPhoneNumber.Text = PhNumber
    End If
End Sub

Private Sub GetId()
    Dim con As New SqlConnection(CS)
    con.Open()
    Dim cmd As New SqlCommand("SELECT MAX(id)+1 FROM Customers")
    textId.Text = FillDataTable().Rows(0)(0).ToString()
    If textId.Text = "" Then
        textId.Text = "1"
    End If

End Sub

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

Public Sub OpenDBConnection()
    objConnection = New SqlConnection(CS)
    objConnection.Open()
End Sub


Public Sub CreateCommandObject()
    objSqlCommand = objConnection.CreateCommand()
    objSqlCommand.CommandText = CommandText
    objSqlCommand.CommandType = CommandType.Text
End Sub

Public Function FillDataTable() As DataTable
    objDataTable = New DataTable()
    objSqlCommand.CommandText = CommandText
    objSqlCommand.Connection = objConnection
    objSqlCommand.CommandType = CommandType.Text
    objDataTable.Load(objSqlCommand.ExecuteReader())
    objConnection.Close()
    Return objDataTable
End Function

Public Sub CloseConnection()
    If objConnection IsNot Nothing Then objConnection.Close()
End Sub

End Class

MainForm.vb

Imports System.Windows.Forms.LinkLabel

Public Class MainForm
Private Sub ExitToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ExitToolStripMenuItem.Click
    Me.Close()
End Sub

Private Sub AddToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles AddToolStripMenuItem.Click
    CustomerForm.ShowDialog()
End Sub

Private Sub AddToolStripMenuItem1_Click(sender As Object, e As EventArgs) Handles AddToolStripMenuItem1.Click
    ProductForm.ShowDialog()
End Sub

Private Sub ViewProductsToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ViewProductsToolStripMenuItem.Click
    ManageProductsForm.ShowDialog()
End Sub

Private Sub AboutToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles AboutToolStripMenuItem.Click
    AboutForm.Show()
End Sub

Private Sub MainForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    'TODO: This line of code loads data into the 'ProductsDatabase2DataSet1.Customers' table. You can move, or remove it, as needed.
    Me.CustomersTableAdapter.Fill(Me.ProductsDatabase2DataSet1.Customers)

End Sub

Private Sub gridCustomers_MouseUp(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles gridCustomers.MouseUp
    Try
        Dim f As CustomerForm = New CustomerForm()
        f.editMode = True
        Dim rowIndex As Integer = gridCustomers.CurrentCell.RowIndex
        f.id = gridCustomers.Rows(rowIndex).Cells("colId").Value.ToString()
        f.FName = gridCustomers.Rows(rowIndex).Cells("colFirstName").Value.ToString()
        f.LName = gridCustomers.Rows(rowIndex).Cells("colLastName").Value.ToString()
        f.PhNumber = gridCustomers.Rows(rowIndex).Cells("colPhoneNumber").Value.ToString()
        f.Show()
    Catch ex As Exception
        MessageBox.Show(ex.Message)
    End Try
End Sub



Private Sub gridCustomers_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles gridCustomers.CellContentClick
    Dim f As CustomerForm = New CustomerForm()
    f.ShowDialog(Me)
    f.editMode = True
End Sub
End Class

错误消息: enter image description here

未显示客户信息: enter image description here

0 个答案:

没有答案