2015-06-24 54 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+和id必須定義每個字段。沒有辦法複製整行? – Muhnamana

+0

...我沒有完成那部分 - 請參閱更新 – Plutonix

+0

我認爲我在我的頭上,仍然在學習繩索和混淆克隆的代碼需要放在關係到表時傳遞到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