简体   繁体   English

在 DataGridView 中复制行

[英]Duplicating Rows In DataGridView

The following code loads a tab delimited file into my DataGridView (loads 1 record from the data file).以下代码将制表符分隔的文件加载到我的 DataGridView 中(从数据文件加载 1 条记录)。 All this works perfectly, however, I need to duplicate this record X amount of times.所有这些都完美无缺,但是,我需要将此记录复制 X 次。 Once the row is duplicated, I'll need to eventually edit some fields and write to a new file with the rows added.一旦行被复制,我最终需要编辑一些字段并写入一个添加了行的新文件。

I'v tried adding rows dynamically but it yells at me saying I can't because the data is bound.我试过动态添加行,但它对我大喊大叫说我不能,因为数据是绑定的。

Suggestions?建议?

    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)

You cannot add directly to a DataGridView which is databound because the data resides elsewhere and the DGV is simply displaying what is there.您不能直接添加到数据绑定的DataGridView ,因为数据驻留在别处,而 DGV 只是显示那里的内容。 To add rows to a DataTable :DataTable添加行:

Dim dr = ds.Tables(0).NewRow()

This will create a new row with the columns defined for it based on the table.这将创建一个新行,其中包含基于表为其定义的列。 Add the data for the new item to it, then add it to the table:将新项目的数据添加到其中,然后将其添加到表中:

dr.Item(0) = "something"   ' add to column one
... etc
ds.Tables(0)Rows.Add(dr)

You did not really need to create a DataSet for what you have so far.你并没有真的需要创建一个DataSet为你所拥有的这么远。 Alternative:选择:

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

To literally clone the data for a row:从字面上克隆一行的数据:

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

Note that you need to create a new row for each clone, the inner loop copies the data from row(0) to each new one.请注意,您需要为每个克隆创建一个新行,内部循环将数据从 row(0) 复制到每个新行。

'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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM