У меня есть DataGridView, который я заполняю из SQL Query (если есть какие-либо данные уже в таблице). У меня есть кнопка «Сохранить и обновить», если изменения сделаны, пользователь может сохранить любые изменения или перенести все сделанные. Однако ..DataGridView привязан к SQL - программно добавляет строки
У меня есть еще одна кнопка, которая переносит их в другую форму, где они могут вводить детали, которые нужно вставить в DataGridView. Это где я получаю проблему, я получаю ошибку ниже:
Rows cannot be programmatically added to the datagridview's row collection when the control is data-bound
Экстракты моего кода ниже, какие-либо идеи? Мне нужно, чтобы DataGridView редактировался, когда кнопка «Сохранить» обновляет таблицу SQL, но мне также нужно иметь возможность вставлять строки из другой формы, где кнопка «Сохранить» также обновляет (вставляет) это.
Форма 1 Код:
Imports System.Data
Public Class AuditForm
Private DAdapter As New SqlClient.SqlDataAdapter()
Private BSource1 As New BindingSource()
Private Sub AuditForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim EmployeeDataset As New DataSet
Dim sSQL As String
If LoadSettings() = False Then
MsgBox("Error: Unable to Load Settings", vbOKOnly + vbCritical)
Me.Close()
End If
With DG_Audit
'General GridView Settings
.AutoGenerateColumns = False
.AllowUserToAddRows = False
.AllowUserToDeleteRows = True
.AllowUserToOrderColumns = False
.MultiSelect = False
.SelectionMode = DataGridViewSelectionMode.FullRowSelect
.ReadOnly = False
.DataSource = BSource1
'General GridView Formatting
.RowsDefaultCellStyle.BackColor = Color.White
.AlternatingRowsDefaultCellStyle.BackColor = Color.LightGray
.RowHeadersDefaultCellStyle.SelectionBackColor = Color.Khaki
.DefaultCellStyle.SelectionBackColor = Color.Khaki
.DefaultCellStyle.SelectionForeColor = Color.Black
End With
End Sub
Private Sub BTLoad_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BTLoad.Click
GetData("SELECT * FROM AdminCS_Audit WHERE Audit_CUser = '" & AdminCB.Text & "' " &
"AND Audit_Submitted IS NULL")
End Sub
Private Sub BTSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BTSave.Click
DAdapter.Update(CType(BSource1.DataSource, DataTable))
'DAdapter.Update(CType(DG_Audit.DataSource, DataTable))
End Sub
Sub GetData(ByRef cmd As String)
Try
Dim cnt As String = gConnection
DAdapter = New SqlClient.SqlDataAdapter(cmd, cnt)
Dim cmdBuilder As New SqlClient.SqlCommandBuilder(DAdapter)
Dim AuditData As New DataTable()
AuditData.Locale = System.Globalization.CultureInfo.InvariantCulture
DAdapter.Fill(AuditData)
BSource1.DataSource = AuditData
Catch ex As Exception
MsgBox(ex.Message, vbOKOnly + vbCritical, "SQL Error")
End Try
End Sub
End Class
Форма 2 Код, который будет где новая строка будет добавлена от: Imports System.Data
Public Class AuditDetailAdd
Private Sub btOK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btOK.Click
Dim PassFail As String
If RB_Passed.Checked = True Then
PassFail = "Pass"
ElseIf RB_Failed.Checked = True Then
PassFail = "Fail"
Else
PassFail = ""
End If
AuditForm.DG_Audit.Rows.Add(Nothing, Nothing, TickForm.AdminCB.Text, CB_Field.Text, L_Action.Text, L_Time.Text, TB_Reason.Text, PassFail, TB_Comments.Text)
Me.Close()
End Sub
End Class