Vb.net 复制DataGridView中的行

Vb.net 复制DataGridView中的行,vb.net,datagridview,datasource,duplicate-data,Vb.net,Datagridview,Datasource,Duplicate Data,以下代码将制表符分隔的文件加载到my DataGridView(从数据文件加载1条记录)。所有这些工作都很完美,但是,我需要将这个记录复制X次。一旦复制了行,我最终需要编辑一些字段,并将添加的行写入新文件 我尝试过动态添加行,但它对我大喊大叫,说我不能,因为数据是绑定的 建议 Dim file As String = "Temp.txt" Dim path As String = "C:\Temp\" Dim ds As New DataSet Dim tbl A

以下代码将制表符分隔的文件加载到my DataGridView(从数据文件加载1条记录)。所有这些工作都很完美,但是,我需要将这个记录复制X次。一旦复制了行,我最终需要编辑一些字段,并将添加的行写入新文件

我尝试过动态添加行,但它对我大喊大叫,说我不能,因为数据是绑定的

建议

    Dim file As String = "Temp.txt"
    Dim path As String = "C:\Temp\"
    Dim ds As New DataSet
    Dim tbl As New DataTable

    Try
        If IO.File.Exists(IO.Path.Combine(path, file)) Then
            Dim ConStr As String = _
            "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
            path & ";Extended Properties=""Text;HDR=No;FMT=TabDelimited\"""
            Dim conn As New OleDb.OleDbConnection(ConStr)
            Dim da As New OleDb.OleDbDataAdapter("Select * from " & _
            file, conn)
            da.Fill(ds, "TextFile")
        End If
    Catch ex As Exception
        MessageBox.Show(ex.ToString)
    End Try

    DataGridView1.DataSource = ds.Tables(0)

您不能直接添加到数据绑定的
DataGridView
,因为数据位于其他位置,而DGV只是显示存在的内容。要将行添加到
数据表

Dim dr = ds.Tables(0).NewRow()
这将创建一个新行,其中包含根据表为其定义的列。将新项目的数据添加到其中,然后将其添加到表中:

dr.Item(0) = "something"   ' add to column one
... etc
ds.Tables(0)Rows.Add(dr)
您实际上不需要为到目前为止所拥有的内容创建
数据集。备选方案:

Private myDT As New DataTable      
...
da.Fill(myDT)

要逐行克隆数据,请执行以下操作:

Dim dr As DataRow

For n As Integer = 0 To NumberOfDuplicates
    dr = myDT.NewRow              ' new DataRow
    For c As Integer = 0 To myDT.Columns.Count - 1   ' copy data from 0 to NewRow
        dr.Item(c) = myDT.Rows(0).Item(c)
    Next
    myDT.Rows.Add(dr)            ' add NewRow to datatable
Next n

请注意,您需要为每个克隆创建一个新行,内部循环将数据从行(0)复制到每个新行。

将行添加到
ds.Tables(0)
但在加载数据之前,我不知道要添加多少行。您可以随时将行添加到DataTable,但不能直接将它们添加到DGV(对吗?文件中只有一行?)是的,文件中只有一行(不包括标题).是的,我知道你不能直接添加到网格中,数据源是需要添加的地方,这是我被难住的地方,特别是因为数据是基于点击按钮加载的。文件有很多字段,100+个,我必须定义每个字段。没有办法复制整行?我想我在这方面还是有点不知所措正在学习rope并困惑克隆代码的位置与表传递到datagridview时的关系。我需要后退一步…您只能在加载数据后克隆一行。但在这之后的任何时候都可以。当您将行添加到DT时,它们只会显示在DGVi添加的数据中在初始加载之前进行dup,这会进行dup,但一旦初始加载完成,我不确定如何进行dup和重新加载。添加一些克隆时,它们将显示在DGV中并成为datatable的一部分,因此无需“重新加载”。如果要在不同的时间添加,datatable可能应该是表单级变量(私人…在程序中不模糊)
'Hope This helps DGV1 is the datagridview
'To copy Row
Private Sub CopyButton_Click(sender As System.Object, e As System.EventArgs) Handles CopyButton.Click
    CopyRowIndex = DGV1.CurrentRow.Index
End Sub

'To Paste Row
Private Sub PasteButton_Click(sender As System.Object, e As System.EventArgs) Handles PasteButton.Click
    PasteRowIndex = DGV1.CurrentRow.Index
    For index As Int32 = 0 To DGV1.ColumnCount - 1
        DGV1.Rows(CInt(PasteRowIndex)).Cells(index).Value = DGV1.Rows(CInt(CopyRowIndex)).Cells(index).Value
    Next

End Sub

'To Duplicate Rows
Private Sub DuplicateButton_Click(sender As System.Object, e As System.EventArgs) Handles DuplicateButton.Click
    CopyRowIndex = DGV1.CurrentRow.Index
    DGV1.Rows.Add()
    DuplicateRowIndex = DGV1.Rows.Count - 1
    For index As Int32 = 0 To DGV1.ColumnCount - 1
        DGV1.Rows(CInt(DuplicateRowIndex)).Cells(index).Value = DGV1.Rows(CInt(CopyRowIndex)).Cells(index).Value
    Next
End Sub