2016-10-25 9 views
0

SQLクエリからデータを取得しているDataGridViewがあります(既にテーブルにデータがある場合)。私は、変更が保存されている場合は変更を保存したり、作成したものを保存したりするための保存および更新ボタンを持っています。しかし..DataGridView SQLにバインド - プログラムで行を追加する

私は、DataGridViewに挿入する詳細を入力できる別のフォームにそれらを取り込む別のボタンがあります。私は問題を取得しています場所です、私は以下のエラーを取得しておいてください。私のコードの

Rows cannot be programmatically added to the datagridview's row collection when the control is data-bound

エキス、以下の任意のアイデアですか?私は保存ボタンがSQLテーブルを更新するDataGridViewを編集可能にする必要がありますが、保存ボタンでもこれを更新(挿入)する別のフォームから行を挿入する必要があります。

形態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コード新しい行から追加されるであろう。 インポート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 

答えて

0

Iは、以下になりました最後に作業する:

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 
    Dim DR As DataRow = CType(TickForm.BSource.DataSource, DataTable).NewRow 
    DR.Item(0) = DBNull.Value 
    DR.Item(1) = Date.Today 
    DR.Item(2) = TickForm.AdminCB.Text 
    DR.Item(3) = CB_Field.Text 
    DR.Item(4) = L_Action.Text 
    DR.Item(5) = DateTime.Parse(L_Time.Text) 
    If Not String.IsNullOrEmpty(TB_Reason.Text) Then 
     DR.Item(6) = TB_Reason.Text 
    Else 
     DR.Item(6) = DBNull.Value 
    End If 
    DR.Item(7) = PassFail 
    If Not String.IsNullOrEmpty(TB_Comments.Text) Then 
     DR.Item(8) = TB_Comments.Text 
    Else 
     DR.Item(8) = DBNull.Value 
    End If 
    CType(TickForm.BSource.DataSource, DataTable).Rows.Add(DR) 

    Me.Close() 
End Sub 
関連する問題