2015-06-24 2 views
2

Следующий код загружает файл с разделителями табуляции в мой DataGridView (загружает 1 запись из файла данных). Все это прекрасно работает, однако мне нужно дублировать эту запись X раз. Как только строка будет дублирована, мне нужно будет в конечном итоге отредактировать некоторые поля и записать в новый файл с добавленными строками.Дублирование строк в DataGridView

Я попытался добавить строки динамически, но он кричит на меня, говоря, что не могу, потому что данные связаны.

Предложения?

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) 
+0

добавить строки в 'ds.Tables (0)' – Plutonix

+0

Я не буду знать, сколько строк добавить до загрузки данных. – Muhnamana

+0

вы можете добавлять строки в DataTable каждый раз, когда захотите, вы просто не можете добавить их непосредственно в DGV (это правильно - есть только одна строка в файле?) – Plutonix

ответ

1

Вы не можете добавлять непосредственно к DataGridView, который с привязкой к данным, так как данные хранятся в другом месте и DGV просто отображая то, что есть. Для добавления строк в DataTable:

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

Это создаст новую строку с колоннами, определенных для него на основе таблицы. Добавьте данные для нового элемента к нему, а затем добавить его к столу:

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) каждому новому.

+0

Файл имеет массу полей, 100+ и идентификатор должен был определить каждое поле. не существует способа дублировать всю строку? – Muhnamana

+0

... я не был сделан с этой частью - см. Обновление – Plutonix

+0

Я думаю, что я в waaaay над моей головой на этом, все еще изучая веревку и запутавшись, где код для клона должен быть помещен в отношение к тому, когда таблица передается datagridview. мне нужно сделать шаг назад на этом ... – Muhnamana

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 
Смежные вопросы