向DataGridView添加行
问题描述:
是的,我知道还有其他帖子,但我无法理解要更改或在哪里使解决方案适合我的代码。向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})
答
这里是我在类加载数据,传回一个数据集(我们可以只使用一个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 *Form1
Private Operations As New Sample1
Private Sub *Form1_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。我们可以将类中的代码放入表单中,但最好将后端操作与前端代码分开。
希望这会有所帮助。
可能重复的[当控件是数据绑定时,行无法以编程方式添加到datagridview的行集合](http://*.com/questions/8708057/rows-cannot-be-programmatically-added-to- (datagridviews-row-collection-when) – Jerrad
就像帖子说的那样,你应该将行添加到数据源(dsDataSetE),而不是数据网格(dgdMembers)。 – Jerrad
@Jerrad我不明白。 – ItsSimplyEddie