DataBinding DataGridView neu laden

  • VB.NET
  • .NET (FX) 3.0–3.5

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von andy9467.

    DataBinding DataGridView neu laden

    Hallo zusammen,
    bin ein bischen am verzweifeln,
    ich versuche meine Daten über eine ToolStripTextBox1 aus der übergeordneten Form zu filtern.
    Die eingabe in de Textbox löst ein TextChanged ereignis aus und schreibt den Inhalt sofort in die Globale Variable LoginForm1.Suche
    und startet dann die Public SelectDate erneut.
    Leider wird dann das DataGridView nicht neu geladen.
    Die SQL Abfrage funktioniert das habe ich getestet indem ich schon Vorab die Textbox mit einem Buchstaben belegt habe.
    Form: Form1 IsMidiContainer True (hier ist die Textbox)
    Form: Anlagen IsMidiContainer False (hier ist das DataGridView1)

    Wie muss ich das anstellen damit die Daten gefiltert angezeigt werden?


    VB.NET-Quellcode

    1. Private Sub ToolStripTextBox1_TextChanged(sender As Object, e As EventArgs) Handles ToolStripTextBox1.TextChanged
    2. LoginForm1.Suche = ToolStripTextBox1.Text
    3. Using frm As New Anlagen
    4. frm.Refresh()
    5. frm.SelectData()
    6. End Using
    7. End Sub


    VB.NET-Quellcode

    1. Public Sub SelectData()
    2. Dim i As String
    3. Dim myData As New DataTable
    4. Dim myBindingSource As New BindingSource
    5. Dim connectionString As String = "Data Source=RLM_Datenbank.s3db;"
    6. Dim SQLSt As String
    7. i = LoginForm1.Suche
    8. SQLSt = "SELECT * FROM Anlage WHERE Abnahmestelle LIKE " & "'" & i & "%'"
    9. DataGridView1.DataSource = myBindingSource
    10. Dim myAdapter As New SQLite.SQLiteDataAdapter(SQLSt, connectionString)
    11. myData = New DataTable("poi")
    12. myAdapter.Fill(myData)
    13. myBindingSource.DataSource = myData
    14. DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells
    15. DataGridView1.Columns.Item(1).Frozen = True
    16. DataGridView1.Columns(0).Visible = False
    17. Me.DataGridView1.Rows(0).Selected = False
    18. End Sub


    Viele Liebe Grüße
    Andy
    erstell auch nicht bei jedem Datenabruf immer neue untypisierte Datatables.
    Tatsächlich - wenn du typisiertes Dataset nimmst, und die typisierten DataTables immer wieder befüllst, statt ständig neue zu erstellen, dann kannst du evtl. auch einfach alle Daten abrufen, und kommst im weitere mit Murdocks Filter aus.
    Aber ist eine ganz andere Denkweise (in der die Datenbank total unwichtig, bzw. besser sogar entbehrlich ist)

    Gugge, ob vier Views-Videos
    dich interessieren, und wenn ja, lerne die notwendigen Vorraussetzungen: Datenverarbeitungs-Vorraussetzungen
    Hi Andy,

    ich weiß nicht ob dir das was hilft aber

    VB.NET-Quellcode

    1. ​frm.Refresh()
    hab ich so nie getan für mein DataGrid zu aktualisieren...

    Vielleicht hilft dir mein Codebeispiel weiter...

    VB.NET-Quellcode

    1. Private Sub ExecNQuery(cmdText As String, viewText As String)
    2. Dim cmd As New SqlCommand(cmdText, conn)
    3. ''Das Kapseln des kritischen Programmteils in einem Try-Catch-Fehlerblock hilft bei der späteren
    4. ''Fehlersuche:
    5. Try
    6. conn.Open()
    7. 'Der SQL-Befehl wird gegen die Datenbank gefahren:
    8. cmd.ExecuteNonQuery()
    9. ' conn.Close()
    10. Catch ex As Exception
    11. MessageBox.Show(ex.Message)
    12. End Try
    13. 'Text und Comboboxen leeren
    14. C1TextBox1.Text = ""
    15. C1TextBox2.Text = ""
    16. C1TextBox7.Text = ""
    17. C1TextBox4.Text = ""
    18. C1TextBox5.Text = ""
    19. ComboBox3.Text = ""
    20. ComboBox2.Text = ""
    21. ComboBox1.Text = ""
    22. C1TextBox3.Text = ""
    23. '' Kontrollanzeig Refresh des Datengrids
    24. Dim da As New SqlDataAdapter(viewText, conn)
    25. Dim dt As New DataTable()
    26. da.Fill(dt)
    27. bs.DataSource = dt
    28. If bs.Count = 0 Then
    29. End If
    30. conn.Close()
    31. DataGridView1.DataSource = bs
    32. End Sub
    Durch die Exception die bei einem Fehler geworfen wird oO
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    Hallo zusammen,
    bin jetzt ein Schritt weiter
    geladen wird das ganze jetzt zuerst mal so:

    VB.NET-Quellcode

    1. Public myData As DataTable
    2. Public Sub SelectData()
    3. Dim myBindingSource As New BindingSource
    4. Dim connectionString As String = "Data Source=RLM_Datenbank.s3db;"
    5. DataGridView1.DataSource = myBindingSource
    6. Dim myAdapter As New SQLite.SQLiteDataAdapter("SELECT * FROM Anlage", connectionString)
    7. myData = New DataTable("Anlage")
    8. myAdapter.Fill(myData)
    9. myBindingSource.DataSource = myData
    10. End Sub


    Der Filter funktioniert dann so jedoch nur wenn ich in der gleichen Form bleib
    sprich wenn ich ein Textfeld in der Form integriere und dort den Suchtext eingebe
    Wenn ich aus der Übergeordneten Form im Textfeld den Suchtext eingebe ist DataView(myData) leer. warum ?

    VB.NET-Quellcode

    1. 'Hier der Aufruf für SucheAnlage aus der Übergeordneten Form:
    2. Private
    3. Sub ToolStripTextBox1_TextChanged(sender As Object, e As EventArgs) Handles ToolStripTextBox1.TextChanged
    4. LoginForm1.Suche = ToolStripTextBox1.Text
    5. Anlagen.SucheAnlage()
    6. End Sub
    7. 'Hier der Aufruf für SucheAnlage aus der gleichen Form :
    8. Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
    9. LoginForm1.Suche = TextBox1.Text
    10. SucheAnlage()
    11. End Sub
    12. Public Sub SucheAnlage()
    13. Dim i As String
    14. i = LoginForm1.Suche
    15. Dim dv As DataView = New DataView(myData)
    16. dv.RowFilter = "Abnahmestelle Like " & " '" & i & "%'"
    17. Me.DataGridView1.DataSource = dv
    18. End Sub