Datagridview如何从另一个datagridview中填充数据
Datagridview how to fill data from another datagridview
在我的发票软件中,我有一个“主”datagridview,我将它与查找功能集成在一起:一旦用户在“代码”字段上按 F3,它就会显示一个模态表单和另一个 datagridview,显示可供选择的产品列表从。
我卡住的地方是用户在所选产品上单击“确定”,因为我不太清楚如何正确填充 Datagridview 以便将所有内容都放在同一行上。这是我的代码:
Private Function RicercaxCodiceArticolo(ByVal codiceart As String)
Dim strsql As String
Dim cmd As SqlCommand
Dim source As New BindingSource
Dim count As Integer
connection.Open()
strsql = "SELECT CODICEARTICOLO AS 'Codice', DESCRIZIONEARTICOLO AS 'Descrizione', UNITAMISURA AS 'Um', CODICEIVA AS 'Iva' " _
& ",COSTOBASE AS 'Costo', PREZZOBASE AS 'Prezzo', COSTOULTIMO AS 'Costo Ult.', BARCODE AS 'Barcode', NOTEARTICOLO AS 'Note' " _
& ",CATEGORIAARTICOLO AS 'Categ.Art.', GIACENZA AS 'Giacenza', FORNITOREPREF AS 'Fornit. Pref.' FROM Articoli " _
& " WHERE CODICEARTICOLO = '" & codiceart & "'"
cmd = New SqlCommand()
cmd.CommandText = strsql
cmd.CommandType = CommandType.Text
cmd.Connection = connection
'TODO: Completare
source.DataSource = cmd.ExecuteReader
DataGridView1.Rows.Add(source.Current!Codice)
DataGridView1.Rows.Add(source.Current!Descrizione)
connection.Close()
End Function
Add方法的第二行当然是错误的,但是如何在同一行填写所有数据呢?
嗯……我会假设一些你忽略告诉我们的事情。
我们必须假设第一个网格不使用 DataSource
并且列是在设计器中或在您未显示的某些代码中添加的。此假设基于将行直接添加到网格的代码,因为在数据绑定时无法将行直接添加到网格。
此外,我假设代码行......
source.DataSource = cmd.ExecuteReader
… 是 return 从 SQL 命令 cmd
中 DataTable
cmd
。
如果我的两个假设都是正确的,那么在我的小测试中,代码行......
source.Current
return source
中“选定”行的 DataRowView
对象,您只需将其转换为 DataRowView
即可获得所需的值添加到网格中的单行。像……
Dim drv As DataRowView
drv = CType(source.Current, DataRowView)
DataGridView1.Rows.Add(drv("Codice"), drv("Descrizione"))
最后,使用 DataTable
作为第一个网格的 BindingSource
的 DataSource
并简单地将行“导入”到 [=14= 中可能是更好的方法].选择你自己的毒药。
在我的发票软件中,我有一个“主”datagridview,我将它与查找功能集成在一起:一旦用户在“代码”字段上按 F3,它就会显示一个模态表单和另一个 datagridview,显示可供选择的产品列表从。
我卡住的地方是用户在所选产品上单击“确定”,因为我不太清楚如何正确填充 Datagridview 以便将所有内容都放在同一行上。这是我的代码:
Private Function RicercaxCodiceArticolo(ByVal codiceart As String)
Dim strsql As String
Dim cmd As SqlCommand
Dim source As New BindingSource
Dim count As Integer
connection.Open()
strsql = "SELECT CODICEARTICOLO AS 'Codice', DESCRIZIONEARTICOLO AS 'Descrizione', UNITAMISURA AS 'Um', CODICEIVA AS 'Iva' " _
& ",COSTOBASE AS 'Costo', PREZZOBASE AS 'Prezzo', COSTOULTIMO AS 'Costo Ult.', BARCODE AS 'Barcode', NOTEARTICOLO AS 'Note' " _
& ",CATEGORIAARTICOLO AS 'Categ.Art.', GIACENZA AS 'Giacenza', FORNITOREPREF AS 'Fornit. Pref.' FROM Articoli " _
& " WHERE CODICEARTICOLO = '" & codiceart & "'"
cmd = New SqlCommand()
cmd.CommandText = strsql
cmd.CommandType = CommandType.Text
cmd.Connection = connection
'TODO: Completare
source.DataSource = cmd.ExecuteReader
DataGridView1.Rows.Add(source.Current!Codice)
DataGridView1.Rows.Add(source.Current!Descrizione)
connection.Close()
End Function
Add方法的第二行当然是错误的,但是如何在同一行填写所有数据呢?
嗯……我会假设一些你忽略告诉我们的事情。
我们必须假设第一个网格不使用
DataSource
并且列是在设计器中或在您未显示的某些代码中添加的。此假设基于将行直接添加到网格的代码,因为在数据绑定时无法将行直接添加到网格。此外,我假设代码行......
source.DataSource = cmd.ExecuteReader
… 是 return 从 SQL 命令
cmd
中DataTable
cmd
。
如果我的两个假设都是正确的,那么在我的小测试中,代码行......
source.Current
return source
中“选定”行的 DataRowView
对象,您只需将其转换为 DataRowView
即可获得所需的值添加到网格中的单行。像……
Dim drv As DataRowView
drv = CType(source.Current, DataRowView)
DataGridView1.Rows.Add(drv("Codice"), drv("Descrizione"))
最后,使用 DataTable
作为第一个网格的 BindingSource
的 DataSource
并简单地将行“导入”到 [=14= 中可能是更好的方法].选择你自己的毒药。