VB.Net,从DataGridView更新表时出现问题

时间:2018-11-06 15:16:44

标签: vb.net datagridview visual-studio-2017

这是我的第一篇文章,所以请原谅我! 我正在尝试将自己从VBA更新到VB.Net。使用来自Google等的大量帮助,我正在做OK,除了尝试从DataGridView更新表时。它只是不更新​​。我想要的是一个单元在更改时进行更新。到目前为止,我的代码已显示出来(我尝试了各种构建器,表等,因此我的代码可能包含一些多余的内容):

Imports System.Data.SqlClient
Imports System.IO
Imports Microsoft.SqlServer

Public Class FrmData
Private dsS As DataSet = New DataSet
Private adpS As SqlDataAdapter
Private builder As SqlCommandBuilder
Private bsource = New BindingSource

Private Sub FrmData_Load(sender As Object, e As EventArgs) Handles 
          MyBase.Load

    Dim sqlS = "SELECT   [Data].[Date] AS [Date] ,
        [Data].[PaidBy] AS [Paid By] ,
        [Data].[PaidAmount] AS [Paid Amount (£)],
        [Data].[AmountLeft] AS [Amount Left (£)] 
        FROM [Data] WHERE [Data].[Name]= '" & strName & "'
        ORDER BY [Data].[Date] DESC"
    Dim adpS As SqlDataAdapter
    adpS = New SqlDataAdapter(sqlS, connection)
    builder = New SqlCommandBuilder(adpS)
    Dim dTable As New DataTable

    bsource.DataSource = dTable
    bsource.EndEdit()
    adpS.Fill(dTable)
    connection.Close()
    DataGridView1.DataSource = dTable

End Sub

Private Sub DataGridView1_CellEndEdit(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellEndEdit
    DataGridView1.EndEdit()
    Dim dt As DataTable
    dt = TryCast(DataGridView1.DataSource, DataTable)

    Dim x As Integer = 0

    If dt.GetChanges() Is Nothing Then
        MessageBox.Show("The table contains no changes to save.")
    Else
        Dim builder = New SqlCommandBuilder(adpS)
        Dim rowsAffected As Integer = adpS.Update(dt)
        If rowsAffected = 0 Then
            MessageBox.Show("No rows were affected by the save operation.")
        Else
            MessageBox.Show(rowsAffected & " rows were affected by the save operation.")
        End If
    End If
End Sub
End Class

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

这是针对SQL Server的。像这样尝试。

-keep class android.arch.persistence.room.**{
    public protected private *;
}

enter image description here

答案 1 :(得分:1)

经过两天的研究,我终于对自己做好了!另外,我也关注@ ryguy72代码。这些是您可以采取的步骤:

第1步:将DataGridView拖放到表单中

第2步:在App.config中,在配置之间添加此代码:

     <connectionStrings>
        <add name="ehsanConnection" connectionString="Data Source=XXX 
         ; User= XX; Password= XXX"  ProviderName="System.Data.SqlClient"/>
     </connectionStrings>

第3步:下面的代码显示了如何以编程方式正确获取DataGridView,对我来说它工作得很好。

     Dim sCommand As SqlCommand
     Dim sAdapter As SqlDataAdapter
     Dim sBuilder As SqlCommandBuilder
     Dim sDs As DataSet
     Dim sTable As DataTable

    Dim connStr As String = 
    ConfigurationManager.ConnectionStrings("ehsanConnection").ToString

    Dim connStri = New SqlConnection(connStr)
    Dim sql As String = "SELECT * FROM [Ehsan].[dbo].[Data]"

    sCommand = New SqlCommand(sql, connStri)
    sAdapter = New SqlDataAdapter(sCommand)
    sBuilder = New SqlCommandBuilder(sAdapter)

    sDs = New DataSet()
    sAdapter.Fill(sDs, "Data")
    sTable = sDs.Tables("Data")
    connStri.Close()

    DataGridView1.DataSource = sDs.Tables("Data")

这里的主要要点是我必须使用[Ehsan]。[dbo]。[Data]不仅是表名“ Data”。实际上,这种方式对我不起作用,并且一直在抱怨!

第4步:如果要在更改datagridview中的某些记录后更新数据库,请使用以下代码:

   sAdapter.Update(sDs.Tables(0))

最重要的一点是:“您必须先在表中设置一个主键,否则它将不起作用!”