none
Daten aus Datagrid in einer Form zum bearbeiten RRS feed

  • Frage

  • Hallo, ich arbeite unter Vb9 Express an einer Bauteildatenbank. Die gefilterten Bauelemente werden in einem DataGridView angezeigt. Der SelectionMode steht auf FullRowSelect. Nun möchte ich die Daten mittels Doppelklick in eine zweite Form zum bearbeiten laden. Wie bekomme ich die Abfrage des Doppelklicks hin und wie lade ich die gewählten Daten in die neue Form? Ich hoffe hier kann mir jemand helfen

    Gruss
    Freitag, 20. November 2009 21:01

Antworten

  • Hallo 1Peltztier,

    Habe zwei Forms aufgestellt. In der ersten Form wird eine DataGridView mit Testdaten geladen. Dieses DataGridView hat zwei Spalten und hat die Eigenschaft SelectionMode als FullRowSelect eingestellt.

    In der zweiten Form habe ich zwei TextBoxen. Wenn man im ersten Form doppelklick auf eine Zeile macht dann werden die ausgewählten Werte aus der DataGridView zu den TextBoxen in der zweite Form übergeben.

     

    Public Class Form1
    
        Private dt As DataTable = Testdata.Getdata '//Testdaten laden
        Private bs As New BindingSource(dt, "")
        Private WithEvents dgv As New DataGridView With {.Dock = DockStyle.Fill, _
                                              .AllowUserToAddRows = False, _
                                              .ReadOnly = True, .DataSource = bs, .SelectionMode = DataGridViewSelectionMode.FullRowSelect}
    
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Me.Controls.Add(dgv) '//Das Grid auf der Form platzieren
        End Sub
    
    
        Private Sub dgv_CellDoubleClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgv.CellDoubleClick
            Form2.tb1.Text = dgv.Rows(e.RowIndex).Cells(0).Value
            Form2.tb2.Text = dgv.Rows(e.RowIndex).Cells(1).Value
            Form2.ShowDialog()
        End Sub
    End Class
    
    Friend Class Testdata
    
        Public Shared Function Getdata() As DataTable
            Dim dt As New DataTable("Tab1")
            With dt
                With .Columns
                    With .Add("ID", GetType(Integer))
                        .AutoIncrement = True
                        .AutoIncrementSeed = 1
                        .AutoIncrementStep = 1
                    End With
                    .Add("Bauteil", GetType(String))
                End With
    
                For i = 1 To 100
                    Dim r As DataRow = .NewRow
                    r.Item("Bauteil") = "Bauteil nummer " & i.ToString
                    .Rows.Add(r)
                Next
            End With
            Return dt
        End Function
    
    End Class
    Public Class Form2
        Public WithEvents tb1 As New TextBox With {.top = 25}
        Public WithEvents tb2 As New TextBox With {.Top = 75}
    
        Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Me.Controls.Add(tb1)
            Me.Controls.Add(tb2)
        End Sub
    End Class


    Grüße,

    Robert

    • Als Antwort markiert 1Peltztier Mittwoch, 23. Dezember 2009 15:16
    Freitag, 18. Dezember 2009 08:59
    Moderator

Alle Antworten

  • Hallo 1Peltztier,
    hatte ich gerade zur hand. schau dir das mal an
    ' DataGridView Programme Double Click
        Private Sub DaGrVie_Porgramme_CellDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DaGrVie_Porgramme.CellDoubleClick
            Dim Selected As Integer = DaGrVie_Porgramme.CurrentRow.Index        ' Ausgewähle Zeile
    Dim Programm As String Programm = DaGrVie_Porgramme.Rows(Selected).Cells(2).Value ' Pfad und Name an Variable übergeben Try System.Diagnostics.Process.Start(Programm) Catch ex As Exception MessageBox.Show(ex.Message) End Try End Sub
    Freitag, 20. November 2009 21:07
  • Danke,

    so bekommeich heraus welche Zeile ich habe.

    Jetzt benötige ich noch einen Hinweis, wie ich der Datenbank sage welchen Datensatz ich brauche und wie ich die Form zum bearbeiten dieses Datensatzes fülle.

    Vielleicht kann mir ja jemand einen Tip geben

    Gruss
    Samstag, 21. November 2009 14:41
  • Hallo 1Peltztier,

    Habe zwei Forms aufgestellt. In der ersten Form wird eine DataGridView mit Testdaten geladen. Dieses DataGridView hat zwei Spalten und hat die Eigenschaft SelectionMode als FullRowSelect eingestellt.

    In der zweiten Form habe ich zwei TextBoxen. Wenn man im ersten Form doppelklick auf eine Zeile macht dann werden die ausgewählten Werte aus der DataGridView zu den TextBoxen in der zweite Form übergeben.

     

    Public Class Form1
    
        Private dt As DataTable = Testdata.Getdata '//Testdaten laden
        Private bs As New BindingSource(dt, "")
        Private WithEvents dgv As New DataGridView With {.Dock = DockStyle.Fill, _
                                              .AllowUserToAddRows = False, _
                                              .ReadOnly = True, .DataSource = bs, .SelectionMode = DataGridViewSelectionMode.FullRowSelect}
    
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Me.Controls.Add(dgv) '//Das Grid auf der Form platzieren
        End Sub
    
    
        Private Sub dgv_CellDoubleClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgv.CellDoubleClick
            Form2.tb1.Text = dgv.Rows(e.RowIndex).Cells(0).Value
            Form2.tb2.Text = dgv.Rows(e.RowIndex).Cells(1).Value
            Form2.ShowDialog()
        End Sub
    End Class
    
    Friend Class Testdata
    
        Public Shared Function Getdata() As DataTable
            Dim dt As New DataTable("Tab1")
            With dt
                With .Columns
                    With .Add("ID", GetType(Integer))
                        .AutoIncrement = True
                        .AutoIncrementSeed = 1
                        .AutoIncrementStep = 1
                    End With
                    .Add("Bauteil", GetType(String))
                End With
    
                For i = 1 To 100
                    Dim r As DataRow = .NewRow
                    r.Item("Bauteil") = "Bauteil nummer " & i.ToString
                    .Rows.Add(r)
                Next
            End With
            Return dt
        End Function
    
    End Class
    Public Class Form2
        Public WithEvents tb1 As New TextBox With {.top = 25}
        Public WithEvents tb2 As New TextBox With {.Top = 75}
    
        Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Me.Controls.Add(tb1)
            Me.Controls.Add(tb2)
        End Sub
    End Class


    Grüße,

    Robert

    • Als Antwort markiert 1Peltztier Mittwoch, 23. Dezember 2009 15:16
    Freitag, 18. Dezember 2009 08:59
    Moderator
  • Vielen Dank für die Hinweise, jetzt ist Weihnachten gerettet  ......

    Mittwoch, 23. Dezember 2009 15:25