2017-04-26 186 views
-1

是的,我知道還有其他帖子,但我無法理解要更改或在哪裏使解決方案適合我的代碼。向DataGridView添加行

錯誤:

Rows cannot be programmatically added to the DataGridView's rows collection when the control is data-bound.

代碼:

Public Sub dsLoadEvents() 
    dsConnectionE = New OleDbConnection 
    dsConnectionE.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data source=DataSourceDB.accdb" 
    dsDataAdapterE = New OleDbDataAdapter 
    dsDataAdapterE.SelectCommand = New OleDbCommand 
    dsDataAdapterE.SelectCommand.Connection = dsConnectionE 
    dsDataAdapterE.SelectCommand.CommandText = "SELECT * FROM Event" 
    dsDataAdapterE.SelectCommand.CommandType = CommandType.Text 
    dsConnectionE.Open() 
    dsDataSetE = New DataSet 
    dsDataAdapterE.Fill(dsDataSetE, "dataSetEvents") 
    dsConnectionE.Close() 
    Form3.dgdEvents.AutoGenerateColumns = True 
    Form3.dgdEvents.DataSource = dsDataSetE 
    Form3.dgdEvents.DataMember = "dataSetEvents" 
End Sub 

這就是程序第一次打開時,事件被加載。我正在努力將數據添加到數據庫,但我嘗試使用以下代碼將其添加到DataGridView,但它給了我上面的錯誤。

Form3.dgdMembers.Rows.Add(New String() {Form3.tbceid.Text, Form3.tbfn.Text, Form3.dtpesd.Value, Form3.dtpdob.Value, Form3.tbal2.Text, Form3.tbal1.Text, Form3.tbpgfn.Text, Form3.tbpgsn.Text, Form3.tbcpp.Text, Form3.tbelid.Text}) 
+2

可能重複的[當控件是數據綁定時,行無法以編程方式添加到datagridview的行集合](http://stackoverflow.com/questions/8708057/rows-cannot-be-programmatically-added-to- (datagridviews-row-collection-when) – Jerrad

+1

就像帖子說的那樣,你應該將行添加到數據源(dsDataSetE),而不是數據網格(dgdMembers)。 – Jerrad

+0

@Jerrad我不明白。 – ItsSimplyEddie

回答

0

這裏是我在類加載數據,傳回一個數據集(我們可以只使用一個DataTable)的示例中,加載到數據表中的形式負載在DataGridView。

在按鈕單擊事件中,我們將DataGridView DataSource轉換爲DataTable並使用硬編碼數據添加新行,但當然這可以像您一樣從TextBox控件中獲取。

Public Class Sample1 
    Private Builder As New OleDbConnectionStringBuilder With 
    { 
     .Provider = "Microsoft.ACE.OLEDB.12.0", 
     .DataSource = IO.Path.Combine(Application.StartupPath, "Database1.accdb") 
    } 
    Public Property dsDataSetE As DataSet 
    Public Function LoadCustomers() As DataSet 

     dsDataSetE = New DataSet 

     Using cn As New OleDbConnection With {.ConnectionString = Builder.ConnectionString} 
      Dim commandText As String = "SELECT Identifier, ContactTitle, Country, CompanyName FROM Customers" 
      Dim dsDataAdapterE = New OleDbDataAdapter(commandText, Builder.ConnectionString) 
      cn.Open() 
      dsDataAdapterE.Fill(dsDataSetE, "Customers") 
      dsDataSetE.Tables("Customers").Columns("Identifier").ColumnMapping = MappingType.Hidden 
     End Using 

     Return dsDataSetE 

    End Function 
End Class 

表格代碼

Public Class StackOverFlowForm1 
    Private Operations As New Sample1 
    Private Sub StackOverFlowForm1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
     Dim ds As DataSet = Operations.LoadCustomers 
     DataGridView1.DataSource = ds.Tables("Customers") 
    End Sub 

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
     CType(DataGridView1.DataSource, DataTable) _ 
      .Rows.Add(New Object() {Nothing, "Owner", "USA", "My company"}) 
    End Sub 
End Class 

上面是一個方法,將數據添加到數據綁定的DataGridView。我們可以將類中的代碼放入表單中,但最好將後端操作與前端代碼分開。

希望這會有所幫助。