将已检查的行从Datagridview1复制到Datagridview2 [英] Copy checked rows from Datagridview1 to Datagridview2

查看:89
本文介绍了将已检查的行从Datagridview1复制到Datagridview2的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

Hello Experts,



我有一个带有Checkbox列的datagridview。我想将选中的行复制到Datagridview2中。我能够复制行,但我的代码是复制复选框列的标题文本选择,其值为True。你能否告诉我如何在没有checkboxColumn的情况下将选中的行复制到Datagridview2

Hello Experts,

I have datagridview with a Checkbox column in it. I want to copy the checked rows into Datagridview2. I am able to copy the rows but my code is copying the checkbox column's Header Text Select and its value as True. Could you please tell me how to copy the checked rows into Datagridview2 without the checkboxColumn

DataGridView2.Columns.Clear()
      DataGridView2.DataSource = Nothing
     

      'Copy the selected rows from datagridview 1 
      Dim dt As New DataTable
      For Each col As DataGridViewColumn In dgvShow.Columns
        If Not col.HeaderText.Contains("Select") Then
          dt.Columns.Add(col.HeaderText)
        End If
      Next
      Dim selectedRows As List(Of DataGridViewRow) = (From row In dgvShow.Rows.Cast(Of DataGridViewRow)() Where Convert.ToBoolean(row.Cells("checkBoxColumn").Value) = True).ToList()

      For Each row As DataGridViewRow In selectedRows
        Dim dRow As DataRow = dt.NewRow()
        For Each cell As DataGridViewCell In row.Cells
          If Not cell.Value.ToString().Contains("Select") Then
            dRow(cell.ColumnIndex) = cell.Value
          End If

        Next
        dt.Rows.Add(dRow)
      Next

      DataGridView2.DataSource = dt
      Dim checkBoxColumn As New DataGridViewCheckBoxColumn()
      checkBoxColumn.HeaderText = "Select"
      checkBoxColumn.Width = 40
      checkBoxColumn.Name = "checkBoxColumn"
      DataGridView2.Columns.Insert(0, checkBoxColumn)





请帮助实现上述



Please help in achieving the above

推荐答案

我建​​议阅读本文: Linq到VB.Net中的datagridview [ ^ ]。作者建议使用扩展方法,但我认为可以以更简单的方式实现:

I'd suggest to read this: Linq to datagridview in VB.Net[^]. Author proposes to use extension method, but i think it's possible to achieve in a simpler manner:
'get selected rows from dgv1 as a list of DataGridViewRow
Dim selectedRows As List(Of DataGridViewRow) = (From row In dgvShow.Rows.Cast(Of DataGridViewRow)() _
    Where row.Cells("checkBoxColumn").Value _
    Select New DataGridViewRow With
    {
       're-write columns, skip checkBoxColumn
    }).ToList()
'add new rows to DataGridView2
DataGridView2.DataSource = selectedRows.Clone()





注意:未经测试!



如果它适用于您,请告诉我。



Note: Not tested!

Please, let me know if it works for you or not.


这是我复制的代码选择从Datagridview1到Datagridview2的行



Here is my code to copy the selected Rows from Datagridview1 to Datagridview2

Try
      Dim selectedRows As List(Of DataGridViewRow) = (From row In dgvShow.Rows.Cast(Of DataGridViewRow)() Where Convert.ToBoolean(row.Cells("checkBoxColumn").Value) = True).ToList()
      If selectedRows.Count > 0 Then
        If DataGridView2.Columns.Count < 0 Then
          For Each c As DataGridViewColumn In dgvShow.Columns
            DataGridView2.Columns.Add(TryCast(c.Clone(), DataGridViewColumn))
          Next
        End If
       

        For Each r As DataGridViewRow In selectedRows
          Dim index As Integer = DataGridView2.Rows.Add(TryCast(r.Clone(), DataGridViewRow))
          For Each o As DataGridViewCell In r.Cells
            DataGridView2.Rows(index).Cells(o.ColumnIndex).Value = o.Value
            r.Cells(0).Value = False
          Next

        Next
      End If
    Catch ex As Exception
      MessageBox.Show(ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1)
    End Try


这篇关于将已检查的行从Datagridview1复制到Datagridview2的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆