Entwickler-Ecke

WinForms - DataGridView inhalte filtern


yndaso - Do 22.04.10 12:06
Titel: DataGridView inhalte filtern
Hallo zusammen,

ich habe in meiner Anwendung ein DataSet mit mehreren Tabellen.
Aus diesem DataSet soll eine Tabelle in einem DataGridView angezeigt werden.

Soweit so gut, nun muss es möglich sein, in einer Textbox Werte einzugeben, nach
denen das DataGridView "gefiltert" werden soll.

Beispiel: In der TextBox gibt der Benutzer ein "A" ein -> Es sollen nur noch
Werte angezeigt werden, die mit A anfangen.

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
DGV:
Name    |  Nummer    |  Preis
Auto    |  0815    |  10000
Flugzeug  |  4711    |  20000
Schiff    |  007    |  15000
....

Nun wird "A" in die Textbox eingetippt, anschließend soll nur noch folgendes erscheinen:
DGV:
Name    |  Nummer    |  Preis
Auto    |  0815    |  10000

Ich hoffe das ich mich verständlich genug ausgedrückt habe.
Könnt ihr mir sagen, wie ich das DataGridView am besten "abspecke"?

Wie realisiert man dies am besten?

Vielen Dank


danielf - Do 22.04.10 12:47

Hallo,

das kannst du einfach mit einer BindingSource realisieren.

Dazu weißt du deine DataTable einer BindingSource hinzu und dieBindingSource wiederum deinen DGV:

C#-Quelltext
1:
2:
3:
   bs = new BindingSource();
   bs.DataSource = table;
   dataGridView1.DataSource = bs;


Wenn nun Text in deiner TExtbox eingegeben wird kannst du auf die BindingSource einen Filter setzen:


C#-Quelltext
1:
bs.Filter = string.Format("Name like '{0}%'", textBoxName.Text");                    


Gruß

Edit:
Ich verwende als eine spezifische FilterDataGrid-Klasse. Dann kann man ein einfaches DataBinding an irgendwelche Contorls (z.b. TextBox) machen. Die Properties werfen dann ähnlich wie bei WPF ein PropertyChanged-Event, auf welches man dann den Filter neu setzen kann. Aber kannst ja mal schauen wie weit du so kommst.


yndaso - Do 22.04.10 19:58

Danke für die ausführliche Antwort!
Ich werde das morgen früh gleich mal probieren und mich
gegebenenfalls nochmals melden :-)


yndaso - Fr 23.04.10 07:06

Guten Morgen,
das klappt schonmal sehr gut.

Ist es möglich den Filter ein bisschen anzupassen?
Momentan wird ja von Position "0" an im String gefilter.
Ich würde aber gerne nach einer Zeichenfolge filtern...

Ich versuchs nochmal mit einem Beispiel anhand Materialnummern zu erklären:

R036027001
R036347264
R116067004
R116067007
R114067030
R114067037

TextBox Eingabe = "360" soll dann nur noch folgender Wert angezeigt werden: R036027001

Momentan müssste man ja "R0360" eingeben...


Kha - Fr 23.04.10 11:44

user profile iconyndaso hat folgendes geschrieben Zum zitierten Posting springen:
Ist es möglich den Filter ein bisschen anzupassen?
Ja.
Hast du dir die Hilfe zu Filter überhaupt schon einmal angeschaut?


JüTho - Fr 23.04.10 11:52

Falls nicht: Einzelheiten stehen unter DataColumn.Expression (das ist leider nur über einige Links zu finden). Jürgen


mo0n_ - Di 24.01.12 17:53

Für alle nicht Genies hier,


C#-Quelltext
1:
[DeineTable]BindingSource.Filter=string.Format("[DeinFeldname] like '%"+[DeineTextBox.Text]+"%'");                    


Die % Zeichen sagen deinem DVG, dass es sich nicht um einen zu suchenden Begriff, sondern um eine zu suchende Zeichenfolge mitten im Text handelt.

liebe Grüße mo0n_

Moderiert von user profile iconTh69: C#-Tags hinzugefügt