sobota, 15 lutego 2014

WinForms: Czyszczenie DateTimePickera

Robiłem ostatnio w WinForms formatkę służącą do wyświetlania danych z bazy zgodnie z podanymi w różnych filtrach parametrami - oczywiście brak danego parametru oznacza nieuwzględnianie danej kolumny w WHERE. Poza kilkoma dropdownami i polem tekstowym były tam też pola do wyboru daty i dwa przyciski - szukaj i wyczyść. Ten drugi miał czyścić zawartość każdego z pól, co, jak się okazało, dla DateTimePickera trzeba zrobić lekko naokoło.

Pierwsze, co przyszło mi do głowy to ustawienie Value na null - jednak Value jest typu DateTime, a nie DateTime?, więc nie można przypisać doń nulla. Drugą opcją sensowną wydało mi się ustawienie Text na pusty string. Nie dało to oczekiwanego rezultatu, ale o dziwo dało całkiem inny - okazało się, że jest to równoznaczne z ustawieniem Value na DateTime.Now. Ciekawe, nie wiedziałem o tym, choć teraz za to nie wiem, czy kiedyś mi się ta wiedza przyda. Wpisanie zaś samej spacji do Text pluje w twarz wyjątkiem System.FormatException.

Tak, wiem, że można ustawić property ShowCheckBox na true i operować checkboxem do określenia, czy data ma być brana do zapytania czy nie, ale w oczekiwanym UI to pole ma być dosłownie czyszczone. Gdy więc własne pomysły się skończyły, pomocny jak zwykle okazał się StackOverflow, a dokładniej ta odpowiedź. Sam pewnie jeszcze bym trochę dumał nim wpadłbym na to, że sprawę załatwiają takie oto dwie linijki:
 
Oczywiście przy zmianie wartości DateTimePickera trzeba ponownie ustawić format na jakiś konkretny, bo inaczej samej zmiany wartości użytkownik i tak nie zobaczy. Ogólnie właściwość CustomFormat można zostawić z taką samą wartością, zmieniając jedynie sam Format na któryś ze zdefiniowanych, jeśli nie ma potrzeby na jakieś specyficzne wyświetlanie daty. Jeśli takie rozwiązanie jest pasuje do potrzeb, to kod (z pominięciem kodu z designera) może wyglądać tak:

Zastanawia mnie jakie jeszcze ciekawostki w WinForms na mnie czyhają.

Brak komentarzy:

Prześlij komentarz