Eine Frage zu BindingSource.Filter

11/11/2008 - 09:56 von K.J. Peter | Report spam
Hallo NG,

in meiner Datenbank befinden sich datum- und nummerische Felder. Der
Benutzter kennt unter Umstànden nicht das genaue Datum bzw. die genau
Nummer. Daher würde ich gerne, wie bei SQL auch möglich, einen Filter
àhnlich wie dieser bilden:

me.KundenBindingSource.Filter = "[Geboren] like '*.10.1967'"

Sowas geht allerdings nicht :-(

Kann man irgendwie den TableAdapter einen SQL-String übergeben oder muß man
das dann immer mit dem OleDbDataAdapter erledigen?

Ich hoffe, es hat jemand einen Tipp für mich.

Gruß
Klaus Jürgen
 

Lesen sie die antworten

#1 Elmar Boye
11/11/2008 - 11:08 | Warnen spam
Hallo Klaus Jürgen,

"K.J. Peter" schrieb ...
in meiner Datenbank befinden sich datum- und nummerische Felder. Der Benutzter kennt unter Umstànden nicht das genaue Datum bzw.
die genau Nummer. Daher würde ich gerne, wie bei SQL auch möglich, einen Filter àhnlich wie dieser bilden:

me.KundenBindingSource.Filter = "[Geboren] like '*.10.1967'"



Zu den Grundlagen:
Die BindingSource implementiert den Filter nicht selbst, sondern
reicht sie an die zugrundliegende Datenquelle über die IBindingListView
Schnittstelle weiter. Funktionieren tut das also nur, wenn die Datenquelle
einen Filter unterstützt.
Ist die Datenquelle eine DataTable/DataView wird das durch
DataView.RowFilter implementiert. Die wiederum versteht
eine Syntax wie DataColumnExpression:
http://msdn.microsoft.com/de-de/lib...ssion.aspx

Zum Ausdruck selbst:
LIKE vergleicht dort nur Zeichenketten, ein Datum müsste also konvertiert werden,
eher sollte das "%" eingesetzt werden, da es ANSI-kompatibel ist, das "*"
existiert nur aus alten Access-Zeiten (und auch das kennt mittlerweile "%").
Datumsangaben wiederum werden wie VB Konstanten angegeben
(also in # eingeschlossen).

Hier bietet sich ein Ausdruck an wie
[Geboren] >= #10/1/1967# AND [Geboren] <= #31/10/1967#

Das wàre mit zwei Datumssteuerelementen (oder allgemeinener als Texteingabe) realisierbar
und hàtte den Vorteil, dass der Benutzer etwas wie LIKE Ausdrücke nicht kennen
müsste (Anwender sind schließlich oftmals keine Programmierer).

Damit das Datum für den Filterausdruck passt, wàre es mit InvariantCulture
zu formatieren.

Etwas was auch gehen würde wie
"CONVERT([Geboren], 'System.String') LIKE '%.10.1967%'"
mag man wohl keinem zumuten (bzw. den Zusatz implementieren).

Kann man irgendwie den TableAdapter einen SQL-String übergeben oder muß man das dann immer mit dem OleDbDataAdapter erledigen?



Wenn Du die TableAdapter eines typisierten DataSet meinst:
Dort kannst Du weitere Abfragen im Designer hinzufügen, die auch
zusàtzliche Parameter als Filter übernehmen können.
Unten drunter werkelt (zumindest bei Access/Jet) dann ein OleDbDataAdapter.

Gruß Elmar

Ähnliche fragen