VB.Net, Проблема обновления таблицы из DataGridView - PullRequest
0 голосов
/ 06 ноября 2018

Это мой первый пост, так что прости меня, если я лох! Я пытаюсь обновить себя от VBA до VB.Net. Используя множество помощи от Google и т. Д. Я делаю ОК, за исключением случаев, когда я пытаюсь обновить свою таблицу из 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 голосов
/ 09 ноября 2018

После двух дней работы над этим я наконец-то понял это для себя! Также я следил за кодами @ 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] не только название таблицы, «Данные». На самом деле, у меня так не получилось, и он продолжал жаловаться!

Шаг 4. Если вы хотите обновить базу данных после изменения некоторых записей в datagridview, используйте этот код:

   sAdapter.Update(sDs.Tables(0))

Главный важный момент заключается в том, что: «Вы должны сначала установить первичный ключ в своей таблице, иначе он не будет работать!»

0 голосов
/ 07 ноября 2018

Это для SQL Server, верно. Попробуйте вот так.

Imports System.Data.SqlClient
Public Class Form1
    Dim sCommand As SqlCommand
    Dim sAdapter As SqlDataAdapter
    Dim sBuilder As SqlCommandBuilder
    Dim sDs As DataSet
    Dim sTable As DataTable

    Private Sub load_btn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles load_btn.Click
        Dim connectionString As String = "Data Source=.;Initial Catalog=pubs;Integrated Security=True"
        Dim sql As String = "SELECT * FROM Stores"
        Dim connection As New SqlConnection(connectionString)
        connection.Open()
        sCommand = New SqlCommand(sql, connection)
        sAdapter = New SqlDataAdapter(sCommand)
        sBuilder = New SqlCommandBuilder(sAdapter)
        sDs = New DataSet()
        sAdapter.Fill(sDs, "Stores")
        sTable = sDs.Tables("Stores")
        connection.Close()
        DataGridView1.DataSource = sDs.Tables("Stores")
        DataGridView1.ReadOnly = True
        save_btn.Enabled = False
        DataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect

    End Sub

    Private Sub new_btn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles new_btn.Click
        DataGridView1.[ReadOnly] = False
        save_btn.Enabled = True
        new_btn.Enabled = False
        delete_btn.Enabled = False
    End Sub

    Private Sub delete_btn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles delete_btn.Click
        If MessageBox.Show("Do you want to delete this row ?", "Delete", MessageBoxButtons.YesNo) = DialogResult.Yes Then
            DataGridView1.Rows.RemoveAt(DataGridView1.SelectedRows(0).Index)
            sAdapter.Update(sTable)
        End If
    End Sub

    Private Sub save_btn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles save_btn.Click
        sAdapter.Update(sTable)
        DataGridView1.[ReadOnly] = True
        save_btn.Enabled = False
        new_btn.Enabled = True
        delete_btn.Enabled = True
    End Sub
End Class

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...