Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
BindingSource Filter
Bonaqua
myCSharp.de - Member



Dabei seit:
Beiträge: 30

Themenstarter:

BindingSource Filter

beantworten | zitieren | melden

Hallo,

ich gebe meiner DataGridView als Datenquelle eine BindingSource.


dataGridView1.DataSource = bsUebersicht;

Nun soll über eine Textbox gefiltert werden können.


 private void textBox1_TextChanged(object sender, EventArgs e)
        {
            try
            {
bsUebersicht.Filter = "Nummer " + string.Format(" LIKE '%{0}%'", textBox1.Text);
}
catch {}
}

Es erscheint keine Fehlermeldung, allerdings werden auch keine Daten gefiltert.
Habe ich etwas vergessen?
private Nachricht | Beiträge des Benutzers
Papst
myCSharp.de - Experte



Dabei seit:
Beiträge: 421
Herkunft: Kassel

beantworten | zitieren | melden

Zitat von Bonaqua
Es erscheint keine Fehlermeldung, allerdings werden auch keine Daten gefiltert.
Habe ich etwas vergessen?

Es erscheint keine Fehlermeldung, weil du eine ggf. erscheinende Unterdrückst.
Weißt du, was der Catch Block macht?
private Nachricht | Beiträge des Benutzers
Bonaqua
myCSharp.de - Member



Dabei seit:
Beiträge: 30

Themenstarter:

beantworten | zitieren | melden

Hmm, ich bin mit dem Debugger durchgegangen und dieser hat keinen Fehler angezeigt.
private Nachricht | Beiträge des Benutzers
Bonaqua
myCSharp.de - Member



Dabei seit:
Beiträge: 30

Themenstarter:

beantworten | zitieren | melden

Hmm, ich bin mit dem Debugger durchgegangen und dieser hat keinen Fehler angezeigt.
private Nachricht | Beiträge des Benutzers
glandorf
myCSharp.de - Member

Avatar #avatar-4144.jpg


Dabei seit:
Beiträge: 80
Herkunft: Chemnitz

beantworten | zitieren | melden

Hallo,

hilft ein ResetBindings an der BindingSource ?

glandorf
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15.852

beantworten | zitieren | melden

Zitat von Bonaqua
dieser hat keinen Fehler angezeigt.
Kann er auch nicht, so wie Du das try-catch umgesetzt hast.
private Nachricht | Beiträge des Benutzers
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 4.358

beantworten | zitieren | melden

Was hast du als eigentliche DataSource (bei der BindingSource) zugewiesen?
Ist Nummer wirklich ein String-Datentyp (denn nur für diesen kannst du Textfilterung durchführen). Für Zahlentypen kannst du ansonsten nur die üblichen Vergleichsoperatoren (=, <, ≤, >, ≥, <>) benutzen.

PS: Die Forensoftware macht automatisch bei > bzw. < gefolgt von = ein Zeichen daraus.
private Nachricht | Beiträge des Benutzers
Bonaqua
myCSharp.de - Member



Dabei seit:
Beiträge: 30

Themenstarter:

beantworten | zitieren | melden

Weshalb würde bei diesem try/catch kein Fehler angezeigt werden, wenn ich den Debugger verwende?

Ein ResetBindings hilft auch nicht.

Das DataSource der BindingSource habe ich eine BindingList<T>.
Die Nummer ist hier statsächlich ein String, da auch Zeichen in der Nummer enthalten sein können. (z.B. KEN-002)
private Nachricht | Beiträge des Benutzers
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 4.358

beantworten | zitieren | melden

BindingSource.Filter unterstützt nur Datenquellen, welche IBindingListView (nicht zu verwechseln mit IBindingList!) implementieren - und BindingList<T> implementiert diese nicht (s.a. "Remarks" im obigen BindingSource.Filter-Artikel).

Edit: Habe online noch BindingListView gefunden (wenn du keine DataTable bzw. DataView benutzen möchtest).
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Th69 am .
private Nachricht | Beiträge des Benutzers
Torni
myCSharp.de - Member



Dabei seit:
Beiträge: 50

beantworten | zitieren | melden

Ich nutze die Suche über die DT (ja, ne extra Spalte für jede Zeile, aber funzt sehr gut und einfach):


        private void Suchfeld_TextChanged(object sender, EventArgs e)
        {
            Suchfilter(true, Suchfeld.Text);
        }

        private void Suchfilter(bool fragment, string Suchbegriff)
        {
            dt_Geraete.DefaultView.RowFilter = string.Format("[_RowString] LIKE '%{0}%'", Suchfeld.Text);
        }

        private void Suchfeld_anlegen()
        {
            if (ColumnExistsInTable(dt_Geraete, "_RowString") == true)
                dt_Geraete.Columns.Remove("_RowString");

            DataColumn dcRowString = dt_Geraete.Columns.Add("_RowString", typeof(string));
            foreach (DataRow dataRow in dt_Geraete.Rows)
            {
                StringBuilder sb = new StringBuilder();
                for (int i = 0; i < dt_Geraete.Columns.Count - 1; i++)
                {
                    sb.Append(dataRow[i].ToString());
                    sb.Append("\t");
                }
                dataRow[dcRowString] = sb.ToString();
            }

            SQL_GeraeteDataGrid.Columns["_RowString"].Visible = false;
        }

        private static bool ColumnExistsInTable(DataTable dataTable, string columnName)
        {
            return dataTable.Columns.IndexOf(columnName) != -1;
        }

p.s. nicht von mir..
private Nachricht | Beiträge des Benutzers
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 4.358

beantworten | zitieren | melden

@Torni: Der von dir gepostete Code sucht aber über alle Spaltenwerte - und das auch noch sehr speicher- und performance-intensiv (bei jeder Werteänderung müßte dann wieder die Suchspalte neu angelegt werden) - also so nicht zu empfehlen...

Und da Bonaqua nur über eine Spalte suchen möchte, ist das also (erst recht) keine Lösung.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Th69 am .
private Nachricht | Beiträge des Benutzers