【问题标题】:VB.NET - Fill Specific Column DataGridView from Another ColumnVB.NET - 从另一列填充特定列 DataGridView
【发布时间】:2017-04-01 05:54:10
【问题描述】:

我有 2 个 DGV 名称 dataListBarangdataListTransaksi,我正在尝试从 dataListBarang 中名为 nm_barang 的特定列中填充名为 nama_barang 的特定列 dataListTransaksi

到目前为止我的代码

Private Sub dataListBarang_CellContentDoubleClick(sender As Object, e As DataGridViewCellEventArgs) Handles dataListBarang.CellContentDoubleClick
        If e.RowIndex >= 0 AndAlso e.ColumnIndex >= 0 Then
            namaBarang = Me.dataListBarang.CurrentRow.Cells(0).Value.ToString
            dataListTransaksi.Columns(1).DataPropertyName = namaBarang
        End If
        dataListBarang.Refresh()
    End Sub

当我双击 DGV dataListBarang 时,列 nama_barang(在 dataListTransaksi 上)将填充来自 DGV dataListBarang 上的列 nm_barang 的值,但它不起作用。

请帮忙。

编辑 我想要做的是当用户双击它时从当前行复制单元格,然后在特定列中填充第二个 DataGrid 上的第一行(dataGrid 的列中没有数据)。

注意:

  1. 看到左边dataGrid有数据,右边dataGrid是空的
  2. 看数字!,当用户双击时,从1的值被复制到数字2
  3. 右侧data​​Grid中的大部分列是手动输入的(Nama Barang除外)并保存到数据库

【问题讨论】:

  • 您是要复制整个列还是只复制单元格?此外,网格数据是否绑定?设置目标列 DataPropertyName... 显然行不通。
  • 是的,我正在尝试复制列中的单元格,第一个 dgv (dataListBarang) 是数据绑定的(从表中读取),但第二个 dgv (dataTransaksiBarang) 不是,因为第二个 dgv 是手动输入的(插入表格)。
  • 如果您要复制单个单元格...您会将这个单元格复制到另一个网格中的哪个位置?例如,用户双击第一个网格中第 3 行第 3 列中的单元格...您会将此单元格复制到另一个网格中的同一行和列中吗?
  • 不,第一个数据网格中的值被复制到另一个数据网格中的另一行和另一列

标签: vb.net datagridview


【解决方案1】:

您的图片显示的是右侧的空DataGridView。如图所示,当你将左侧网格中的单元格复制到右侧网格中的单元格时,会出现一些问题。您必须先“添加”一个新行。否则,来自用户的后续双击将简单地覆盖先前的双击。下面的代码检查双击是否来自第 0 列,如果是,则简单地在右侧的网格中添加一个新行。第 0 列中的值被复制到新行第 1 列。希望我没有遗漏什么。

Private Sub dataListBarang_CellContentDoubleClick(sender As Object, e As DataGridViewCellEventArgs) Handles dataListBarang.CellContentDoubleClick
  Dim row As Integer = e.RowIndex
  Dim col As Integer = e.ColumnIndex
  If (col = 0) Then
    dataListTransaksi.Rows.Add("", dataListBarang.Rows(row).Cells(0).Value)
  End If
End Sub

更新:如果您不知道要复制哪一列但您知道它的名称..

Private Sub dataListBarang_CellContentDoubleClick(sender As Object, e As DataGridViewCellEventArgs) Handles dataListBarang.CellContentDoubleClick
  Dim row As Integer = e.RowIndex
  Dim col As Integer = e.ColumnIndex
  If (col = 0) Then
    Dim newRowIndex As Integer = dataListTransaksi.Rows.Add()
    dataListTransaksi.Rows(newRowIndex).Cells("MyColName").Value = dataListBarang.Rows(row).Cells(0).Value
  End If
End Sub

【讨论】:

  • 感谢@JhonG,我根据您的回答制定了解决方案。
【解决方案2】:

我根据@JhonG 的回答修改了我的代码

 Private Sub dataListBarang_CellContentDoubleClick(sender As Object, e As DataGridViewCellEventArgs) Handles dataListBarang.CellContentDoubleClick
        Dim row As Integer = e.RowIndex
        Dim col As Integer = e.ColumnIndex
        namaBarang = Me.dataListBarang.CurrentRow.Cells(0).Value.ToString
        If (col = 0) Then

            If e.RowIndex >= 0 AndAlso e.ColumnIndex >= 0 Then
                dataListTransaksi.Rows.Add("", namaBarang)
                'hargaBarang = Me.dataListBarang
                'Me.dataListTransaksi.CurrentRow.Cells(1).Value = namaBarang
            End If
        End If

当我双击 firstDataGrid 时,它会将值复制到另一个 dataGrid 并添加新行。

【讨论】:

  • 我在这里可能是错的......但是检查“e”的行或列是否小于零是不必要的,因为在网格外双击不会触发此事件。您几乎可以在这里保证一个有效的单元格,即使新行双击也不会触发此事件。只是一个想法。
猜你喜欢
  • 2012-02-27
  • 1970-01-01
  • 2012-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-03
相关资源
最近更新 更多