2017-05-25 2 views
1

Ich habe ein Datagridview-Raster mit vier Spalten. Wenn auf eine Zelle doppelgeklickt wird, werden die Daten in der ausgewählten Zeile an vier Textfelder übergeben, damit der Benutzer ggf. Änderungen vornehmen kann.Wie übertrage ich die an der ausgewählten Zeile vorgenommenen Änderungen, anstatt die Änderungen als neue Zeile hinzuzufügen?Edit Ausgewählte Datagridview Zeile vb.Net

P.S. Die Daten stammen nicht aus einer Datenbank

+0

Sind die Daten im Grid in einer 'DataTable' gespeichert? Ist es eine Ansicht einer Tabelle in der Datenbank? Zeigen Sie Code an, der die 'DataSource' des Rasters festlegt. – David

+0

Nein, die Daten stammen nicht aus einer Datenbank. –

+0

Wie lautet der Primärschlüssel? Ich nehme an, dass es in den Daten eine Art eindeutige Kennung gibt? – David

Antwort

1

Sie können sich entweder an die DataGridViewRow "erinnern", indem Sie eine Variable auf Modulebene festlegen, oder Sie können die Zeile erneut suchen, indem Sie nach ihrem Primärschlüssel suchen.

Public Class Form1 
    'Add to form: 
    ' DataGridView called DataGridView1 
    ' 4 Textboxes called TextBox1, TextBox2, TextBox3, and TextBox4 
    ' Button called btnEdit 
    ' Button called btnSave 

    Private mintRowWeAreEditing As Integer = -1 
    Private Sub btnEdit_Click(sender As Object, e As EventArgs) Handles btnEdit.Click 
    If DataGridView1.DataSource Is Nothing Then 
     'set initial data 
     Dim dtb As New DataTable 
     dtb.Columns.Add("Col1") 
     dtb.Columns.Add("Col2") 
     dtb.Columns.Add("Col3") 
     dtb.Columns.Add("Col4") 
     dtb.Rows.Add("R1C1", "R1C2", "R1C3", "R1C4") 
     dtb.Rows.Add("R2C1", "R2C2", "R2C3", "R2C4") 
     dtb.Rows.Add("R3C1", "R3C2", "R3C3", "R3C4") 
     dtb.Rows.Add("R4C1", "R4C2", "R4C3", "R4C4") 
     DataGridView1.DataSource = dtb 
    End If 
    'copy data from grid to textboxes 
    mintRowWeAreEditing = DataGridView1.CurrentCell.RowIndex 
    Dim drw As DataRow = DirectCast(DataGridView1.Rows(mintRowWeAreEditing).DataBoundItem, DataRowView).Row 
    TextBox1.Text = drw("Col1").ToString 
    TextBox2.Text = drw("Col2").ToString 
    TextBox3.Text = drw("Col3").ToString 
    TextBox4.Text = drw("Col4").ToString 
    End Sub 

    Private Sub btnSave_Click(sender As Object, e As EventArgs) Handles btnSave.Click 
    'copy data from textboxes to grid 
    If mintRowWeAreEditing = -1 Then Exit Sub 'haven't clicked Edit button yet 
    Dim drw As DataRow = DirectCast(DataGridView1.Rows(mintRowWeAreEditing).DataBoundItem, DataRowView).Row 
    drw("Col1") = TextBox1.Text 
    drw("Col2") = TextBox2.Text 
    drw("Col3") = TextBox3.Text 
    drw("Col4") = TextBox4.Text 
    End Sub 
End Class 
+0

Könnten Sie bitte durch einen Beispielcode erklären? –

+0

OK Ich habe Democode hinzugefügt. – SSS

+0

Vielen Dank, das hat gut funktioniert. –

0

So, zum Beispiel könnten Sie so etwas auf Ihrem Button Click Event tun.

Private Sub btnUpdate_Click(sender As Object, e As EventArgs) Handles btnUpdate.Click 


    Dim refNo As Integer = txtRefNo.Text  ' Change DataType and TextBox name as appropriate 
    Dim firstName as String = txtFName.Text 
    ' Repeat setting variables for each field in the row that you're updating 

    For Each dgr As DataGridViewRow in DataGridView1.Rows 
    If dgr.Item("RefNo") = refNo Then 
     dgr.Cells(0).Value = firstName 'Instead of using (0) you can use the column name 
     dgr.Cells(1).Value = newVar 
    End If 
    Next 

' Commit the changes/refresh here 

End Sub 

Ich habe nicht die IDE Hand, dies zu testen, aber alle Probleme lassen Sie mich wissen, ich werde einen Blick in sie haben.

+0

Danke auch David. –

Verwandte Themen