【问题标题】:Transfering Rows Between DataGridViews Across 2 Different Forms In VB.NET在 VB.NET 中跨 2 个不同表单在 DataGridViews 之间传输行
【发布时间】:2014-05-16 05:18:23
【问题描述】:
第一次发帖。
所以我在 VB.NET 的 Visual Studio 2013 中制作这个程序
假设我有两种形式:
Form1 和 Form2,在 Form1 上我有 DataGridView1,在 Form 2 上我有 DataGridView2
两个数据网格具有相同的列。
如何在 Form1 上的按钮的单击事件中从 DataGridView1 中获取我当前关注/选择的行中的所有数据,以将其传输到 Form2 上的 DataGridView2。
我正在尝试做的事情的图片。
如果有人能帮我解决这个问题,我将不胜感激。谢谢
【问题讨论】:
标签:
.net
vb.net
winforms
datagridview
transfer
【解决方案1】:
感谢大家的回复,但我最终这样做了:
Private Sub searchPartsDataGridView_CellContentClicked(sender As Object, e As DataGridViewCellEventArgs) Handles searchPartsDataGridView.CellContentDoubleClick
Dim colName As String = searchPartsDataGridView.Columns(e.ColumnIndex).Name()
Dim rowIndex = searchPartsDataGridView.CurrentRow.Index
If colName = "ITEMNO" Then
formPartsRequest.partsRequestItemsDataGridView.Rows.Add(searchPartsDataGridView.Rows(rowIndex).Cells("ITEMNO").Value, searchPartsDataGridView.Rows(rowIndex).Cells("DESC").Value)
End If
End Sub
不确定这是否是最好的方法,或者它是否是良好的编码实践,但它似乎工作正常并且符合我的目的。谢谢
【解决方案2】:
首先,我们必须知道您是否在使用数据绑定 DataGridView。
如果数据绑定:
Form1:
dim dt as new DataTable()
// Fetch data from DB and assign it to DataSource.
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
// Run query to fetch data
// dt = GetTableByRunningQuery
dataGridView1.DataSource = dt
End Sub
Private Sub btnTransfer_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim frm2 as new Form2()
frm2.dataSource = dt
frm2.Show()
End Sub
Form2:
Public dataSource as Object
Private Sub Form2_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
dataGridView1.DataSource = dataSource
End Sub
如果不是数据绑定:
Form1:
Private Sub btnTransfer_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim frm2 as new Form2()
frm2.SetRows(dataGridView1.Rows)
frm2.Show()
End Sub
Form2:
Public Sub SetRows(ByVal rows as DataGridViewRowCollection)
For each row as DataGridViewRow in rows
Dim newRow as DataGridViewRow = Ctype(row.Clone(), DataGridViewRow)
dataGridView1.Rows.Add(newRow)
Next
End Sub
【解决方案3】:
试试这个,
'Form1-- following code will be placed in button click
Dim cells(grd.Columns.Count) As New Object
For c As int = 0 To grd.Columns.Count
cells(c) = grd.CurrentRow.Cells(c).Value
Next
Dim frm As Form1 = Application.OpenForms("frmName")
frm.sendRow(cells)
'Form2 -- Create a method that will add all cell values from form 1
Public Sub sendRow(ByVal cells() As Object)
grd.Rows.Add(cells)
End Sub