在重置函数后,Visual Basic添加行函数不起作用

人气:796 发布:2022-10-16 标签: sql database vb.net visual-studio visual-studio-2019

问题描述

我会澄清我的问题。以下是背景信息:

使用Visual Basic在Visual Studio 2019中创建数据库 数据库由我必须拥有帐户的设备和序列号等列表组成 我有搜索功能、过滤功能和一些编辑功能

我遇到的问题是,一旦我单击Reset按钮(应该将未保存的数据视图更改重置回上次保存的更改),添加行功能就不再起作用。代码没有抛出任何错误,只是在单击按钮时拒绝添加新行(在点击重置按钮之前,添加行按钮工作正常)

下面是我如何使用SQL填充我的数据库:

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Dim connection As New SqlConnection("Connection String Placeholder")
    Dim Table As New DataTable()
    Dim Adapter As New SqlDataAdapter("SELECT * FROM TrackMain$", connection)
    Adapter.Fill(Table)
    DataGridView1.DataSource = Table

    bind_data()
    nextId = Convert.ToInt32(dt.Rows(dt.Rows.Count - 1)(0)) + 1

End Sub

我还尝试对我的第一列进行数字排序,因此在那里和我的Add ROW函数(这可能是罪魁祸首)中也有NextID值

下面是添加行然后重置函数:

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    Dim dr As DataRow = dt.NewRow()
    dr(0) = nextId
    dt.Rows.Add(dr)
    nextId += 1

End Sub

Private Sub Button6_Click(sender As Object, e As EventArgs) Handles Button6.Click
    Dim connection As New SqlConnection("Connection String Placeholder")
    Dim Table As New DataTable()
    Dim Adapter As New SqlDataAdapter("SELECT * FROM TrackMain$", connection)
    Adapter.Fill(Table)
    DataGridView1.DataSource = Table
    nextId = Convert.ToInt32(dt.Rows(dt.Rows.Count - 1)(0)) + 1
End Sub

如果还有任何问题,请让我知道,谢谢你

编辑:这是我的Bind_Data()Sub

Private Sub bind_data()
    connection.Open()
    Dim cmdTxt As String = "SELECT * FROM TrackMain$"
    da = New SqlDataAdapter(New SqlCommand(cmdTxt, connection))
    Dim builder As SqlCommandBuilder = New SqlCommandBuilder(da)
    da.Fill(dt)
    Dim source As BindingSource = New BindingSource With {
                                .DataSource = dt
                              }
    DataGridView1.DataSource = source

End Sub

推荐答案

这是我测试的全部代码,该代码适合我。

Private dt As DataTable = New DataTable
Private da As SqlDataAdapter
Private connection As SqlConnection = New SqlConnection("connection string")
Dim nextId As Integer = 0

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    bind_data()
    nextId = Convert.ToInt32(dt.Rows(dt.Rows.Count - 1)(0)) + 1
End Sub

' Update database by DataGridView.'
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    For i As Integer = DataGridView1.Rows.Count - 1 To 0
        Dim row As DataGridViewRow = DataGridView1.Rows(i)

        If Not row.IsNewRow AndAlso row.Cells(0).Value Is Nothing Then
            DataGridView1.Rows.RemoveAt(i)
        End If
    Next
    DataGridView1.EndEdit()
    da.Update(dt)
End Sub

' Add new Row.'
Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
    Dim dr As DataRow = dt.NewRow()
    dr(0) = nextId
    dt.Rows.Add(nextId)
    nextId += 1
End Sub

' Reset the dt and DataGridView.'
Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
    Dim Table As New DataTable()
    dt.Clear()
    Dim Adapter As New SqlDataAdapter("SELECT * FROM TrueTrack", connection)
    Adapter.Fill(dt)
    DataGridView1.DataSource = dt
    nextId = Convert.ToInt32(dt.Rows(dt.Rows.Count - 1)(0)) + 1
End Sub

Private Sub bind_data()
    connection.Open()
    Dim cmdTxt As String = "SELECT * FROM TrueTrack"
    da = New SqlDataAdapter(New SqlCommand(cmdTxt, connection))
    Dim builder As SqlCommandBuilder = New SqlCommandBuilder(da)
    da.Fill(dt)
    Dim source As BindingSource = New BindingSource With {
                                    .DataSource = dt
                                  }
    DataGridView1.DataSource = source
End Sub
Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing
    connection.Close()
End Sub

我的数据库设计:

然后添加一些记录:

856