代码之家  ›  专栏  ›  技术社区  ›  JRowe95

在VB.NET中跨两种不同表单在DataGridView之间传输行

  •  0
  • JRowe95  · 技术社区  · 12 年前

    首次发布。 所以我在visual studio 2013中用VB.NET制作这个程序

    假设我有两种形式:

    Form1和Form2,在Form1上我有DataGridView1,在Form2上我有数据GridView2

    两个数据网格具有相同的列。

    如何在Form1上单击按钮事件从DataGridView1中获取我当前关注/选择的行中的所有数据,并将其传输到Form2上的DataGridView2。

    我想做的事情的图像。 enter image description here

    如果有人能帮我解决这个问题,我将不胜感激。谢谢

    3 回复  |  直到 12 年前
        1
  •  0
  •   Shell    12 年前

    试试这个,

    '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
    
        2
  •  0
  •   NeverHopeless    12 年前

    首先,我们必须知道您是否使用数据绑定的DataGridView。

    如果数据绑定:

    表格1:

    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
    

    表格2:

    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
    

    如果不是数据绑定:

    表格1:

    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
    

    表格2:

    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
  •  0
  •   JRowe95    12 年前

    谢谢大家的回复,但我最终还是这样做了:

    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
    

    不确定这是否是最好的方法,也不确定它是否是良好的编码实践,但它似乎工作得很好,符合我的目的。谢谢

    推荐文章