DateTimePicker - zwraca wartosci inne niz wybrane

0

Witam,

Mam problem z wartością zapisywaną w DateTimePicker.
Po jakiejkolwiek zmianie daty, a przed zapisaniem jej do tabeli, DateTimePicker pokazuje błędną wartość.

Przykładowo, zmieniam wartość "terminPlatnosciDateTimePicker" i po każdej zmianie odczytuję wartość do "ZaplatatextBox".

        private void terminPlatnosciDateTimePicker_ValueChanged(object sender, EventArgs e)
        {
            ZaplatatextBox.Text = terminPlatnosciDateTimePicker.Value.ToString();
        }

Niestety, każda zmiana generuje aktualną datę, niezależnie jaką wartość wybiorę z kalendarza terminPlatnosciDateTimePicker.

Czy to jest normalne zachowanie DateTimePicke i należy się zainteresować alternatywną kontroilką ?

0

Zrobiłem taką prostą aplikację z DTP i TextBoxem i na ValueChanged pokazuje poprawną datę. Może jednak gdzieś indziej coś powoduje, że masz niepoprawne działanie tej kontrolki.

0
Richardo napisał(a)

Czy to jest normalne zachowanie DateTimePicke i należy się zainteresować alternatywną kontroilką ?

Tak - naturalnym zachowaniem kontrolki o nazwie WybieraczDatyICzasu jest uniemożliwienie wyboru daty :/
Proponowałbym jednak wypić kawę, zanim się zada pytanie, może dzięki temu będzie ono sensowniejsze.

Lepiej napisz, co zepsułeś, bo to ani normalne ani prawidłowe.

0
somekind napisał(a)

Lepiej napisz, co zepsułeś, bo to ani normalne ani prawidłowe.

Sprawdziłem na nowym formularzu i standardowo kontrolka działa prawidłowo.

Problemy pojawiają się gdy kontrolka DataTimePicker jest powiązana z polem tabeli i wchodzę w tryb dopisywania nowego rekordu fakturyBindingSource.AddNew();
Pierwsze wyświetlenie formularza wykazuje jakąś wartość DataTimePicker, pokrywającą się z wartością pobraną do textboxa, ale każda następna zmiana daty w DataTimePicker, pomimo prawidłowego wyświetlenie wybranej daty w kontrolce, nie pokrywa się z wartością pobraną z niej - z kontrolki pobierana jest każdorazowo aktualna data, niezależnie jaką datę ustawię w DataTimePicker.
Zagadkowe jest dla mnie to, że to tabeli zapisywana jest prawidłowo wybrana data.

Może jest jakiś inny sposób dostania się do wartości DataTimePicker ?
Próbowałem za pomocą :
DataTimePicker.Value
DataTimePicker.Text

0

sprawdz czy w eventhandlerze, sender == twojakontrolka, czy moze uzywasz sendera?
gridy, kontrolki edycyjne itp potrafia zachowywac sie dziwnie.. sprawdz czy kontrolka faktycznie wpisuje dane do grida/datasource'a, sprawdz czy kontrolka edycyjna prawidlowo sie de-focusuje i czy jej validating sie wywoluje, sprawdz czy datasource/grid zauwazaja cell value changed (o ile maja taki event, eh..)

jak nic z tych rzeczy - wrzuc kod caly formatki.. lacznie z ladowaniem danych, lacznie z initcomponent (o ile jest znosnej wielkosci), lacznie z reszta innych eventhandlerow (.....).. jest wiele rzeczy ktore moga Ci sie wcinac w prace..

0

Mam dziwne przeczucie, że tworzysz w biegu nowe kontrolki i ich wartość odczytujesz. Lud żąda kodu!

0
quetzalcoatl napisał(a)

sprawdz czy w eventhandlerze, sender == twojakontrolka, czy moze uzywasz sendera?

Dopiero wczoraj udało mi się wrócić do problemu kontrolki i bardzo dziękuję wszystkim za wskazówki.
Zacząłem od ręcznego zdefokusowania kontrolki, ale niczego to nie zmieniło.
Następnie sprawdziłem czy senderr == kontrolka i mocno się zdziwiłem, gdyż sender ma prawidłową wartość, a kontrolka podaje jakieś bzdury.
Ale nadal nie bardzo wiem jaki jest tego powód i jak to poprawić ?

Wykonałem testową aplikację , gdzie jest tylko kontrolka operująca na danych z tabeli i wszystko działa O.K. , więc coś musiałem skopać w mojej aplikacji.

[Dodane]

Zauważyłem też pewną zależność :

    private void FormFaktura_Load(object sender, EventArgs e)
    {
        this.asortymentTableAdapter1.Fill(this.dataSet1.asortyment);
        this.asortymentTableAdapter.Fill(this.dataSetFaktury.asortyment);
        this.fakturypozycjeTableAdapter.Fill(this.dataSetFaktury.fakturypozycje);
        this.kontrahenciTableAdapter.Fill(this.dataSetFaktury.kontrahenci);
        this.fakturyTableAdapter.Fill(this.dataSetFaktury.faktury);

this.fakturyBindingSource.MoveLast();
this.RazemWartoscFaktury(); // oblicz i wyświetl wartość faktury
}

Gdy wyeliminuję z powyższego kodu linię this.fakturyBindingSource.MoveLast(); ,
operacje na kontrolce daty działają prawidłowo. Hmmm, nadal nie potrafię dostrzec błędu :(

W ostateczności oczywiście wrzucę kod, ale jest tego sporo.

1 użytkowników online, w tym zalogowanych: 0, gości: 1