Na formularzu mam ustawioną kontrolkę typu DateTimePicker z terminem płatności. Chciałbym mieć możliwość wprowadzenia <null> jako wartości domyślnej, oznaczającej brak terminu płatności.
Niestety, kalendarz z którego nie chiałbym rezygnować, nie pozwala na wprowadzene null - czy jest jakieś rozwiązanie takiego problemu ?
Ustaw sobie ShowCheckBox na true i sprawdzaj właściwość Checked.
albo sciagnij jakas paczke kontrolek 3rd party ktore maja bardziej rozbudowana kontrolke od dat i umozliwiaja np. skasowanie wartosci DEL'em
Do tej pory nie brałem pod uwagę CheckBox ponieważ odnosiłem wrażenie, że nie działa on zgodnie z oczekiwaniem.
Gdy otwieram tabelę i poruszam się po rekordach, gdzie 'Termin płatności' jest null, Checked jest ustawiony na 'false'.
Gdy wejdę na rekord z podanym terminem płatności, Checked przestawia się na 'true', ale po przejściu do następnych rekordów, gdzie znowu termin płatności jest null, Checked nie zmienia już wartości na 'false' - pozostaje trwale ustawiony na 'true' - ta więc sprawdzanie Checked nie miałoby sensu, chyba, że coś źle wykonuję ?
A gdzie masz napisane, że Checked zmienia wartość Value na null?
Dlaczego każdy oczekuje, że wszystko działać będzie tak jak on chce zaraz po przeciągnięciu kontrolki z Toolbox na formę?
class MyDateTimePicker : DateTimePicker
{
public MyDateTimePicker()
{
this.ShowCheckBox = true;
}
protected override void OnKeyDown(KeyEventArgs e)
{
if (e.KeyData == Keys.Back)
{
this.MyValue = null;
}
base.OnKeyDown(e);
}
public DateTime? MyValue
{
get
{
if (this.Checked)
return Value;
else
return null;
}
set
{
if (value == null)
this.Checked = false;
else
this.Value = value.Value;
}
}
}
I używaj MyValue zamiast Value.
A na przyszłość polecam zaglądać na codeproject.com
http://www.codeproject.com/KB/selection/Nullable_DateTimePicker.aspx
http://www.codeproject.com/KB/selection/NullableDateTimePicker.aspx
http://www.codeproject.com/KB/selection/NDTP_VS2008.aspx
http://www.codeproject.com/KB/selection/DateTimeSlicker.aspx
Dziękuję wszystkim za pomocne wskazówki.