在 DataGridView 中复制行
Duplicating Rows In DataGridView
以下代码将制表符分隔的文件加载到我的 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 只是显示那里的内容。向 DataTable
添加行:
Dim dr = ds.Tables(0).NewRow()
这将创建一个新行,并根据 table 为其定义列。将新项目的数据添加到其中,然后将其添加到 table:
dr.Item(0) = "something" ' add to column one
... etc
ds.Tables(0)Rows.Add(dr)
您实际上并不需要为目前已有的内容创建 DataSet
。备选方案:
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) 行复制到每个新行。
'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
以下代码将制表符分隔的文件加载到我的 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 只是显示那里的内容。向 DataTable
添加行:
Dim dr = ds.Tables(0).NewRow()
这将创建一个新行,并根据 table 为其定义列。将新项目的数据添加到其中,然后将其添加到 table:
dr.Item(0) = "something" ' add to column one
... etc
ds.Tables(0)Rows.Add(dr)
您实际上并不需要为目前已有的内容创建 DataSet
。备选方案:
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) 行复制到每个新行。
'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