walidacja danych

Odpowiedz Nowy wątek
2009-11-05 07:36

Rejestracja: 10 lat temu

Ostatnio: 6 miesięcy temu

0

Witam,
Zaczynam dopiero naukę programowania więc proszę o wyrozumiałość.
Mam w programie kilkanaście textbox'ów do wprowadzania danych do bazy i potrzebuję dokonać weryfikacji wprowadzanych danych. Widziałem że w ASP są odpowiednie kontrolki ale w MV C# 2008 Express nie znalazłem.
Do rzeczy:
Dla wszystkich textbox'ów - nie mogą być puste;
oraz dla poszczególnych:

  • sprawdza czy format daty jest prawidłowy;
  • sprawdza czy format godziny jest prawidłowy;
  • sprawdza czy jest wpisana wyłącznie liczba całkowita;

Pozostało 580 znaków

2009-11-05 08:43

Rejestracja: 12 lat temu

Ostatnio: 2 tygodnie temu

0
trzcionek napisał(a)

Dla wszystkich textbox'ów - nie mogą być puste;
oraz dla poszczególnych:

  • sprawdza czy format daty jest prawidłowy;
  • sprawdza czy format godziny jest prawidłowy;
  • sprawdza czy jest wpisana wyłącznie liczba całkowita;

To przed wysłaniem danych do bazy sprawdzaj poprawność otrzymanych danych od użytkownika. A jeśli chcesz żeby to było w stylu kontrolek ASP.NET to sprawdzaj poprawność danych po stracie focusa na TextBoxie. A tutaj i tutaj lektura na temat walidacji danych w Windows Forms.


Pozostało 580 znaków

2009-11-05 08:51

Rejestracja: 10 lat temu

Ostatnio: 6 miesięcy temu

0

Ale jak sprawdzić np. czy to co jest wpisane jest liczbą lub czy wygląda rrrr-mm-dd?
Bo tak to sobie IF'em sprawdzę ;)

PS. Fajny bajer z googlem ;)

rozwiązuję sprawdzanie w ten sposób:

        private void godzinaTB_Validating(object sender, CancelEventArgs e)
        {
            System.Text.RegularExpressions.Regex reg = new System.Text.RegularExpressions.Regex("^([0-9]{2}):([0-9]{2}):([0-9]{2})$");
            System.Text.RegularExpressions.Match matches = reg.Match((sender as TextBox).Text);
            if (matches.Success)
            {
                this.label12.Visible = false;
            }
            else
            {
                this.label12.Visible = true;
                this.label12.Text = "Nieporawny format!";
                //e.Cancel = true;
            }

        }

Tylko w jaki sposób zapobiec dodaniu źle wpisanego elementu do bazy, bo nie chcę zablokować możliwości opuszczenia textbox,a

Pozostało 580 znaków

2009-11-05 11:17

Rejestracja: 12 lat temu

Ostatnio: 2 tygodnie temu

0
trzcionek napisał(a)

Ale jak sprawdzić np. czy to co jest wpisane jest liczbą

Najprościej spróbować sparsować takiego stringa na inta czy inny typ liczbowy i sprawdzić czy nie jest rzucany wyjątek. Masz od tego metody np. Int.TryParse(). Możesz rozważyć też stworzenie TextBoxa, który będzie przyjmować tylko wartości numeryczne.

trzcionek napisał(a)

lub czy wygląda rrrr-mm-dd?

Użyj wyrażeń regularnych albo MaskedTextBox.


Pozostało 580 znaków

2009-11-05 11:30

Rejestracja: 10 lat temu

Ostatnio: 6 miesięcy temu

0

Jak wcześniej napisałem wyrażenia regularne użyłem ale nie wiem jak w buttonie sprawdzić czy dane wpisane w textboxa'a są prawidłowe. (znaczy czy ktoś nie olał komunikat o błędnym formacie).

Pozostało 580 znaków

2009-11-05 12:36

Rejestracja: 17 lat temu

Ostatnio: 8 lat temu

0

jak ktos depnie buttona - na ktorym masz sprawdzanie czy wszystko jest okej, np

if (textbox1.text.length==0)
{
MessageBox.Show("wystapil blad, nie podales danych w textboxie nr 1");
return;
}

return spowoduje przerwanie wykonywania dalszej czesci kodu, innymi slowy, koles nie przejdzie dalej jesli nie zostanie spelniony powyzszy warunek...


Lardux

Pozostało 580 znaków

2009-11-05 12:47

Rejestracja: 10 lat temu

Ostatnio: 6 miesięcy temu

0

Ale co z tym jeśli są tam wpisane bzdury?
Jeśli jest puste to załatwiłem przez Trim().

Pozostało 580 znaków

2009-11-05 12:57

Rejestracja: 17 lat temu

Ostatnio: 8 lat temu

0

no to teraz nie czaje, bo najpierw piszesz

(znaczy czy ktoś nie olał komunikat o błędnym formacie)

moje rozwiązanie z return, blokuje program przed przejściem dalej, wiec koleś nie przejdzie choćby nie wiem co, i olanie komunikatu mu nic nie pomoże...

jeśli natomiast chcesz sprawdzić czy koleś nie wpisał bzdur, no to muszę Cie zmartwić, nie ma na to rady... przed pewnymi możliwościami możesz się obronić (np sprawdzić czy NIP jest poprawny, lub adres Email) ale już np Imie czy Nazwisko, to możesz jedynie sprawdzić cz nie zawiera znaków specjalnych (bo cyferki może zawierać)

na ludzką głupotę nie ma rozwiązania, nie znajdziesz cudownego środka na sparsowanie stringa tak jak byś chciał, zawsze znajdzie się ktoś kto coś wymyśli, czego Ty nie przewidziałeś


Lardux

Pozostało 580 znaków

2009-11-05 13:22

Rejestracja: 10 lat temu

Ostatnio: 6 miesięcy temu

0

Już nie wiem jak to opisać.
W ten sposób sprawdzam wyświetlam komunikat o błędzie wprowadzanych danych:
Trochę nieudolnie z datą zrobiłem, ale to w tej chwili nie ważne:

        private void dataTB_Validating(object sender, CancelEventArgs e)
        {
            System.Text.RegularExpressions.Regex reg = new System.Text.RegularExpressions.Regex("^([1-2]{1})([0-9]{3})-([0-1]{1})([1-9]{1})-([0-3]{1})([1-9]{1})$");
            System.Text.RegularExpressions.Match matches = reg.Match((sender as TextBox).Text);
            if (matches.Success)
            {
                e.Cancel = false;
                this.errorProviderMain.Clear();              
            }
            else
            {
                this.errorProviderMain.SetError(dataTB, "Nieporawny format!");
                e.Cancel = false;
            }
        }

I teraz najważniejsze jeśli obok textbox'a pojawia się informacja o błędnym formacie. to żeby po kliknięciu przycisku dodaj wyskoczył Mesagebox z informacją że coś jest błędne i nie zostanie wykonania reszta kodu.

Tutaj początek tego co mam w buttonie:

        private void dodaj_Click(object sender, EventArgs e)
        {
            if (this.oddzialTB.Text.Trim() != "" && this.strefaTB.Text.Trim() != "" && this.ludzieTB.Text.Trim() != "" && this.dataTB.Text.Trim() != "" && this.godzinaTB.Text.Trim() != "" && this.nazwiskoTB.Text.Trim() != "" && this.telefonTB.Text.Trim() != "")
            {
(...)
}
}

Pozostało 580 znaków

2009-11-05 14:53

Rejestracja: 17 lat temu

Ostatnio: 8 lat temu

0

robisz to troche od dup... strony.... nie wiem po co sprawdzac za kazdym razem czy koles nie popelnil gafy.. nie lepiej dac mu w spokoju wypelnic wszystkie pola a na koniec przy sprawdzaniu krzyknac ze cos ma zle i przerwac dzialanie guzika ok?

ale jak juz sie uparles na to swoje sprawdzanie - to dodaj sobie tablice bool w ilosci tyle ile masz tych swoich text boxow, i przy sprawdzaniu poprawnosci formatu ustawiaj sobie np
dla textboxa1 is_ok[0]=true dla textboxa2 is_ok[1]=true... i tak dalej

a na koncu, w tej twojej metodzie dodaj_click zrob

if (is_ok[0] && is_ok[1] && is_ok[....]) 
{
//wtedy odpal ten kod
}

Lardux

Pozostało 580 znaków

2009-11-05 16:15

Rejestracja: 10 lat temu

Ostatnio: 6 miesięcy temu

0

to że od "niewłaściwej" strony to zauważyłem, ale brak mi umiejętności - dopiero zaczynam.
W jaki sposób widziałbyś rozwiązanie czegoś takiego
mając textboxy:
imię nazwisko liczba data godzina telefon
Button_Dodaj;
I po kliknięciu Dodaj sprawdzi czy wszystkie nie są puste oraz czy "liczba" jest liczbą, "data" w formacie rrrr-mm-dd oraz "godzina" w formacie hh:mm:ss.

Z góry dzięki za pomoc.

Pozostało 580 znaków

Odpowiedz

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