datagridview BindingSource

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von xtts02.

    datagridview BindingSource

    Hallo

    ich möchte gern die spaltenauswahl nach den gefiltert werden soll gern über die TextBox eingeben, geht das überhaupt ?

    momentan sieht es es so aus:

    Betrag ist die spalte/Column - in TextBox2 gebe ich den suchbegriif ein

    TestBindingSource.Filter = "Betrag like '%" & TextBox2.Text & "%'"

    nun möchte ich gern eine zweite TextBox wo ich die spalte auswählen kann zum filtern
    Sorry, hatte es nicht so ganz erklärt

    ich habe im datagridview 14 spalten mit text und zahlen

    was ich nur möchte ist das ich die spalten per TextBox angeben kann

    so ungefähr meine ich:

    TestBindingSource.Filter = "Betrag like '%" & TextBox2.Text & "%'"

    anstatt Betrag soll dort die textbox1 stehen so das der Bindingsource die auswahl der spalte der Textbox1 überlässt
    Die Antwort ist immer noch dieselbe.
    Je nachdem, was Du vergleichen willst. Wenn Du beispielsweise Zahlen vergleichen willst, dann Du die Eingabe zuerst nach numerischen Wert parsen.
    Wenn Du Text vergleichen willst, aber die entsprechende Spalten einen anderen Datentyp hat als String, dann musst du die Spalte zuerst nach String konvertieren (siehe letzten Posting + Link)
    verstehe schon, aber so wie es jetzt ist funktioniert es ja nur halt nach spalte betrag
    wenn ich im code dann anstatt betrag "Artikel" eingebe und den Suchbegriff auch in textbox2 geht es ja auch

    betrag = Zahlenwert
    Artikel = Text

    möchte halt nur nicht über code das jedesmal ändern, müsste doch anders auch gehen oder ?
    So ungefähr ... (nach drei dunklen Weizen)

    VB.NET-Quellcode

    1. Public Class MainForm
    2. Dim dt As New DataTable
    3. Private Sub MainForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    4. Me.PrepareDataTable()
    5. Dim r = dt.NewRow
    6. r.Item(0) = "Vorname"
    7. r.Item(1) = "Nachname"
    8. r.Item(2) = Now
    9. r.Item(3) = 100
    10. dt.Rows.Add(r)
    11. End Sub
    12. Private Sub PrepareDataTable()
    13. With dt.Columns
    14. .Add("Vorname", GetType(String))
    15. .Add("Nachname", GetType(String))
    16. .Add("Geburtstag", GetType(Date))
    17. .Add("Alter", GetType(Integer))
    18. End With
    19. Me.BindingSource1.DataSource = dt
    20. Me.DataGridView1.DataSource = Me.BindingSource1
    21. Dim colNames As New List(Of String)
    22. For index = 0 To Me.DataGridView1.Columns.Count - 1
    23. colNames.Add(Me.DataGridView1.Columns(index).HeaderText)
    24. Next
    25. Me.ComboBox1.DataSource = colNames
    26. Me.ComboBox1.DropDownStyle = ComboBoxStyle.DropDownList
    27. End Sub
    28. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    29. If Not Me.IsHandleCreated Then Return
    30. Dim selectedColumn = dt.Columns(Me.ComboBox1.SelectedIndex)
    31. If selectedColumn IsNot Nothing Then
    32. Dim colName = selectedColumn.ColumnName
    33. If selectedColumn.DataType <> GetType(String) Then
    34. ' Datentyp der Spalte <> String -> Nach String konvertieren
    35. colName = String.Format("CONVERT ({0}, 'System.String')", colName)
    36. End If
    37. Me.BindingSource1.Filter = String.Format("{0} LIKE '%{1}%'", colName, Me.TextBox1.Text)
    38. End If
    39. End Sub
    40. End Class