Laden...

Wie kann ich aus drei DatePickern im CodeBehind mit SelectedDateChanged einen SQL-Filter erstellen?

Erstellt von echdeneth vor 3 Jahren Letzter Beitrag vor 3 Jahren 456 Views
echdeneth Themenstarter:in
161 Beiträge seit 2019
vor 3 Jahren
Wie kann ich aus drei DatePickern im CodeBehind mit SelectedDateChanged einen SQL-Filter erstellen?

Moin, habe ein kleines Problem... (code behind)

Ich habe 3 DatePicker. Von / Bis und Datum

Von/Bis und Datum müssen sich dabei einander ausschließen (nullen)
da beide in MySQL diesselbe Spalte filtern sollen.

Nur resultiert eine Änderung im Datepicker ja im SelectedDateChanged Event.
Ich kann ja nicht in den Events der jeweiligen DP den/die anderen DP nullen.
Also habe ich es mit bool's und if 's probiert - ich komme nicht auf'n Zeiger...

Ich kann dem MurksCode ja mal hier bei Bedarf posten.
Hatte ja nie eine Notwendigkeit so etwas konstruieren zu müssen
und leider gibt Google da auch nichts her.

"Man muß die Dinge so einfach wie möglich machen. Aber nicht einfacher." Albert Einstein

F
10.010 Beiträge seit 2004
vor 3 Jahren

Wenn du von SelectedDateChanged redest, bedeutet das du benutzt kein MVVM.
Damit wäre das kein problem.
[Artikel] MVVM und DataBinding
Alles andere ist nur frickelei

G
180 Beiträge seit 2015
vor 3 Jahren

Nur um sicher zu gehen, dass ich das richtig verstanden habe:

Du hast 3 DatePicker: Von (nennen wir jetzt A), bis (B) und Datum (C).

A, B, und C verweisen auf denselben Datensatz in der Datenbank?

Konkretes Beispiel:
A (01.01.2021) , B (01.01.2021) , C (01.01.2021)

Ist das so gemeint?

Falls ja, dann mal folgende Fragen:

  • darf der Benutzer ein in A eingegebenes Datum gar nicht erst in B und C auswählen?
  • dürfen A und C identisch sein?
  • düfen B und C identisch sein?
  • darf weder A, B, noch C mit irgendeinem anderen identisch sein?

So ganz habe ich jetzt nicht verstanden, was du genau erreichen möchtest. Kannst du das was du vorhast genauer beschreiben?

echdeneth Themenstarter:in
161 Beiträge seit 2019
vor 3 Jahren

Datum A und B sind Von und Bis
Datum C meint ein spezifisches Datum

Beide suchen in der selben Spalte

... WHERE datum > 'DateA' AND < 'DateB
... WHERE datum = 'DateC'

es sollte klar sein, das bei einer Abfrage A und B beide ein Datum haben müssen und C keines
und umgekehrt...

ist in MVVM kein Ding - da käme ich allein drauf, in CodeBehind jedoch...

"Man muß die Dinge so einfach wie möglich machen. Aber nicht einfacher." Albert Einstein

G
180 Beiträge seit 2015
vor 3 Jahren

es sollte klar sein, das bei einer Abfrage A und B beide ein Datum haben müssen und C keines
und umgekehrt...

Wie soll dann diese Anweisung funktionieren?

... WHERE datum > 'DateA' AND < 'DateB
... WHERE datum = 'DateC'

Denn wenn deine Daten hier keinen Wert haben, dann erhälst du eine Null-Exception. Oder sind deine DateTimes nullable? Aber dann wäre die ganze Abfrage ja Kokolores...

Ich denke mal, du wirst eine List<DateTime> benutzen, in der alle in Frage kommenden Daten enthalten sind. Dann hättest du so etwas wie

var resultDate = DateList.Where(d => d.Date > DateA && d.Date < DateB).FirstOrDefault(); 

Was ich absolut nicht verstehe ist, wie DatumC da ins Spiel kommt. Oder brauchst du hier einen zweiten Wert? Dann würdest du im Prinzip den obigen Linq-Code mit der Lambda-Expression eben noch mal anwenden:
[

var dateC = DateList.Where(d => d.Date == DateC).FirstOrDefault();

]

Kleine Anmerkung: FirstOrDefault macht hier natürlich nur Sinn, wenn du EIN bestimmtes Datum suchst, denn der Ausdruck wird dir genau das erste DAtum in der Liste, auf den die Lambdas verweisen zurückliefern. Ohne FirstOrDefault wirds ein IEnumerabel.

Hoffe, das hilft dir weiter,
Gruß
vorph