如何将datagridview1的特定列插入datagridview2?

时间:2015-05-05 03:58:33

标签: mysql vb.net datagridview multiple-columns multiple-records

这是我的VB.NET Windows窗体应用程序的屏幕截图。

1

在一个窗体中有两个datagridviews(dgvReport和dgvReport2)。 dgvReport在选择字段后显示来自服务器的数据(工作正常)。

有一些复选框代表dgvReport中列的名称。如果用户选择"电子邮件"例如," Email"的列及其行数据。应该添加到dgvReport2。

我的问题是,当我选择多个复选框时,行的输出仅显示在dgvReport2的第一列,而不是在相应的列下。例如,我选择两列"电子邮件"和" fname"然后当我点击按钮"添加"两列都添加在dgvReport2中,但是列" fname"显示在dgvReport2(第一列)中的电子邮件列下的数据。

如何将行数据放在适当的列下?我认为Index似乎对此有用,但现在问题是如何从datagridview读取数据并将其分配到索引中以便可以轻松地插入到另一个datagridview中?

以下是我的代码:

'Add dynamic column
Dim newCol As Integer = 0

If chkEmail.Checked = True Then
    Dim column As New DataGridViewTextBoxColumn
    dgvReport2.Columns.Insert(newCol, column)

    With column
        .HeaderText = "email"
        .AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells
        .ReadOnly = True
    End With

    For rows As Integer = 0 To dgvReport.Rows.Count - 1
        For colcnt As Integer = 0 To dgvReport.Columns.Count - 17
            dgvReport2.Rows.Add(dgvReport.Rows(rows).Cells(0).Value)
        Next
    Next

    newCol += 1
End If

If chkFname.Checked = True Then
    Dim column As New DataGridViewTextBoxColumn
    dgvReport2.Columns.Insert(newCol, column)

    With column
        .HeaderText = "fname"
        .AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells
        .ReadOnly = True
    End With

    For rows As Integer = 0 To dgvReport.Rows.Count - 1
        For colcnt As Integer = 0 To dgvReport.Columns.Count - 17
            dgvReport2.Rows.Add(dgvReport.Rows(rows).Cells(1).Value)
        Next
    Next
    newCol += 1
End If

1 个答案:

答案 0 :(得分:0)

我找到了自己问题的答案。希望能够帮助其他正在寻找相同问题的人:

替换

For rows As Integer = 0 To dgvReport.Rows.Count - 1
    For colcnt As Integer = 0 To dgvReport.Columns.Count - 17
        dgvReport2.Rows.Add(dgvReport.Rows(rows).Cells(0).Value)
    Next
Next

以下内容:

            If dgvReport2.Rows.Count > 0 Then
                For rows As Integer = 0 To dgvReport.Rows.Count - 1
                    dgvReport2.Rows(rows).Cells(newCol).Value =
                    dgvReport.Rows(rows).Cells(1).Value
                Next
            Else
                For rows As Integer = 0 To dgvReport.Rows.Count - 1
                    dgvReport2.Rows.Add(dgvReport.Rows(rows).Cells(1).Value)
                Next
            End If