none
In BindingSource Zahlenspalte als Textspalte filtern RRS feed

  • Frage

  • Hallo Leute,

    ich stehe hier wieder echt auf dem Schlauch.

    Ich habe ein Datagridview, eine BindingSource und ein BindingNavigator. Die Datentabelle kennt nur 2 Spalten, nach denen ich Filtern möchte. Dabei ist eine Spalte ein Integerwert, den ich aber nach String-Methode filtern möchte.

    Private Sub FrmMailadressen_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    'DGVMailadressen.DataSource = myDataSet.Tables(EnTables.Mailadressen)
            Bs_Mail.DataSource = myDataSet              'BindingSource
            Bs_Mail.DataMember = myDataSet.Tables(EnTables.Mailadressen).ToString
    
            Bn_Mail.BindingSource = Bs_Mail             'BindingNavigator
            DGVMailadressen.DataSource = Bs_Mail
    End Sub

    Bevor ich die BindingSource und BindingNavigator verwendet hatte, wurde das Datagridview mit der Dateset-Tabelle direkt bestückt, so dass ich für das Filtern, einfach eine Spalte "Search" eingefügt hatte, die ich als String definiert hatte. So konnte ich jetzt gleichzeitig für das Zahlenfeld (MandantNr) und das Textfeld (Mailadresse) suchen.

    Private Sub ToolStripTxtSearch_Enter(sender As Object, e As EventArgs) Handles ToolStripTxtSearch.Enter
            Dim filterField As String = ""
            filterField = myDataSet.Tables(EnTables.Mailadressen).Columns(DGVMailadressen.CurrentCell.ColumnIndex).ColumnName
            Try
                _lastCol = DGVMailadressen.CurrentCell.ColumnIndex
                myDataSet.Tables(EnTables.Mailadressen).Columns.Add("Search").Expression = "convert(" & filterField & ",'System.String')"
                DGVMailadressen.Columns("Search").Visible = False
                DGVMailadressen.CurrentCell = DGVMailadressen(_lastCol, 0)
            Catch

            End Try
    End Sub

    Private Sub ToolStripTxtSearch_TextChanged(sender As Object, e As EventArgs) Handles ToolStripTxtSearch.TextChanged myDataSet.Tables(EnTables.Mailadressen).DefaultView.RowFilter = String.Format("[{0}] LIKE '%{1}%'", "Search", ToolStripTxtSearch.Text.ToString) &
                                                                    " Or " & String.Format("[{0}] LIKE '%{1}%'", "Mailadresse", ToolStripTxtSearch.Text.ToString)
    End Sub

    Ich habe aber keine Ahnung, ob wie ich das mit einer BindingSource hingekomme.

    Mein Ziel soll sein:

    Suche nach: 0585

    Gefunden:

    MandantNr.     Email
    10000            test0585@gmx.de
    10585            test_1@gmx.de

    Man soll also einfach ein Suchbegriff eingegeben und es soll über alle 2 Spalten nach Inhalt gesucht werden.

    Ich hoffe, jemand hat eine Idee und kann mir hier weiterhelfen.

    Vielen Dank im Voraus.

    Gruß Ahmed


    Donnerstag, 10. Oktober 2019 17:42

Antworten

  • Ich habe die Lösung gefunden.

    Bs_Mail.Filter = String.Format("Convert({0},System.String) LIKE '%{1}%'", "MandantNr", ToolStripTxtSearch.Text.ToString) & " Or " & String.Format("[{0}] LIKE '%{1}%'", "Mailadresse", ToolStripTxtSearch.Text.ToString)

    Damit wird eine Zahlenspalte in eine Textspalte konvertiert und kann nach Textkriterien gefiltert werden.

    Like '31'

    10031
    31002
    10312

    Die BindingNavigator wird ebenfalls damit automatisch aktualisiert.

    Gruß A. Martens

    • Als Antwort markiert Ahmed Martens Freitag, 11. Oktober 2019 16:03
    Freitag, 11. Oktober 2019 16:03

Alle Antworten

  • Hallo Ahmed,
    das hier sollte ein passendes Beispiel sein:
    https://docs.microsoft.com/de-de/dotnet/api/system.windows.forms.bindingsource.filter?view=netframework-4.8

    Für deine Fall sollte es etwa so aussehen:
    Bs_Mail.Filter= " MandantNr. = 10000 or Eamil='test0585@gmx.de'";

    Grüße Alexander

    Donnerstag, 10. Oktober 2019 19:50
  • Vielen Dank für die Info, aber das ist keine Lösung meines Problems.

    Vielmehr benötige ich eine Zahlenspalte als Textspalte, damit ich darin nach Textkriterien (Like) filtern kann. In einem Datagridview konnte ich hierzu einfach eine Dummy-Spalte über Convert hinzufügen.

    Kann ich eventuell ein Dataview dazwischen schalten und wenn ja, wie müssten dann die Verknüpfungen zwischen allen beteiligten Elementen aussehen, also BindingSource, BindingNavigator, DatagridView usw.)

    Gruß A. Martens

    Freitag, 11. Oktober 2019 13:06
  • Ich habe die Lösung gefunden.

    Bs_Mail.Filter = String.Format("Convert({0},System.String) LIKE '%{1}%'", "MandantNr", ToolStripTxtSearch.Text.ToString) & " Or " & String.Format("[{0}] LIKE '%{1}%'", "Mailadresse", ToolStripTxtSearch.Text.ToString)

    Damit wird eine Zahlenspalte in eine Textspalte konvertiert und kann nach Textkriterien gefiltert werden.

    Like '31'

    10031
    31002
    10312

    Die BindingNavigator wird ebenfalls damit automatisch aktualisiert.

    Gruß A. Martens

    • Als Antwort markiert Ahmed Martens Freitag, 11. Oktober 2019 16:03
    Freitag, 11. Oktober 2019 16:03