ASP.NET i Web Matrix – część 2

Transkrypt

ASP.NET i Web Matrix – część 2
Działanie stron ASP.NET. Programowanie zdarzeniowe
5. Tworzenie prostego kalkulatora
5.1. Cel przedsięwzięcia i zasada działania
Nadeszła już pora, żeby stworzyć konkretną aplikację w ASP.NET. Będzie to kalkulator,
pozwalający wykonywać cztery podstawowe działania arytmetyczne na dwóch liczbach.
Rysunek 4. Planowany wygląd aplikacji
Jego zasada działania będzie następująca:
 Użytkownik ma wpisać dwie liczby w pola tekstowe, wybrać operację oraz nacisnąć
przycisk Wynik, w celu wykonania działania i obliczenia wyniku.
 Po kliknięciu w jeden z operatorów, w lewej dolnej etykiecie ma się pojawić tekst
opisujący wybraną operację (np. dla „+” napis [suma] itp.).
 Po naciśnięciu przycisku Wynik mają zostać odczytane napisy z obu pól tekstowych
i zamienione na liczby typu double (zmiennoprzecinkowe). Ma na nich zostać
wykonana żądana operacja, zaś wynik należy sformatować do postaci 5 + 3 = 8.
 Wpisanie błędnych wartości ma spowodować wyświetlenie ostrzeżenia dla użytkownika.
5.2. Budowa interfejsu użytkownika
W celu stworzenia żądanej strony, wykonaj poniższe czynności:
1. Załóż na dysku twardym własny katalog na pliki do tego zadania.
2. Otwórz program WebMatrix.
1
Działanie stron ASP.NET. Programowanie zdarzeniowe
3. Stwórz nową stronę ASP.NET Page, upewnij się czy w polu Language jest wybrana
opcja C#, a następnie zapisz stronę w swoim katalogu, w pliku o nazwie
Kalkulator.aspx.
4. Wstaw do tej strony nagłówek: Kalkulator.
5. Wstaw do tej strony tabelę, poleceniem HTML  Insert Table.
6. Podaj następujące dane:
Rows: 3 (liczba wierszy), Width: 400 (szerokość),
Columns: 4 (liczba kolumn), Height: 200 (wysokość).
7. Kliknij we wstawioną tabelę (w jedną z jej ramek), aby zaznaczył się znacznik
<TABLE>. Ustaw jej właściwość border na 1. W celu wskazania znacznika <TABLE>
możesz również kliknąć we wnętrze dowolnej komórki tabeli i skorzystać z listy
znaczników w oknie właściwości, zatytułowanej Click to see parent HTML elements.
8. Następnie, korzystając z menu kontekstowego, połącz komórki w drugim oraz trzecim
wierszu (polecenia Merge cell left oraz Merge cell right). Możesz również przełączyć
się na zakładkę HTML i samodzielnie usunąć zbędne znaczniki <td></td>, w zamian
wpisując w odpowiednich znacznikach <td> parametr colspan (o ile pamiętasz
jeszcze te elementy języka HTML).
9. W komórki tabeli wstaw kontrolki Web Controls, nazywając każdą z nich (zmieniając
im właściwość (ID)) następująco:
Label
– LabLiczba1,
TextBox – TxtLiczba1,
RadioButtonList – RblOperacja,
Label
– LabLiczba2,
Button
– BtnWynik,
Label
– LabOperacja,
TextBox – TxtLiczba2,
Label
– LabWynik.
10. Ustaw właściwość align wybranych komórek na Center, aby zmienić wygląd tabeli.
11. Dla kontrolki RblOperacja zmodyfikuj listę elementów (właściwość Items), dodając
przyciskiem Add elementy i ustaw ich właściwości Text oraz Value na:
+
[suma]
–
[różnica]
*
[iloczyn]
/
[iloraz]
12. Ustaw pozostałe właściwości kontrolek, zgodnie z poniższą tabelą:
Kontrolka
Nazwa kontrolki (ID)
Nazwa właściwości
2
Wartość właściwości
Działanie stron ASP.NET. Programowanie zdarzeniowe
Label
TextBox
RadioButtonLis
LabLiczba1
TxtLiczba1
RblOperacja
Text
MaxLength
AutoPostBack
Liczba 1:
20
True
ListItem[0]
Text
Value
Text
Value
Text
Value
Text
Value
Text
MaxLength
Text
Text
Font.Bold
Text
Font.Bold
+
[suma]
[różnica]
*
[iloczyn]
/
[iloraz]
Liczba 2:
20
Wynik
[...]
True
(...)
True
t
ListItem[1]
ListItem[2]
ListItem[3]
Label
TextBox
Button
Label
LabLiczba2
TxtLiczba2
BtnWynik
LabOperacja
Label
LabWynik
15. Zapisz dokonane zmiany i sprawdź, czy strona poprawnie wygląda w przeglądarce.
W tym celu naciśnij mały przycisk Play na pasku narzędzi środowiska WebMatrix
i zatwierdź uruchomienie serwera ASP.NET.
5.3. Reakcja na zmianę wybranej operacji
Jak być może dało się zauważyć, włączenie właściwości AutoPostBack kontrolki
RblOperacja dało ciekawy efekt: po każdej zmianie operacji strona jest automatycznie
wysyłana na serwer, który odsyła nową wersję tej strony. Jest to zachowanie pożądane,
na które jeszcze trzeba zareagować. Zgodnie z założeniem, powinien się wtedy zmieniać
napis w lewej dolnej etykiecie.
W tym celu wykonaj następujące czynności:
 Dla wstawionej kontrolki RblOperacja odszukaj na zakładce ze zdarzeniami zdarzenie
o nazwie SelectedIndexChanged (zmieniono numer wybranej opcji). Kliknij w to
zdarzenie dwa razy, aby dodać procedurę jego obsługi.
 Napisz obsługę zdarzenia zgodnie z punktem  pomysłu działania.
 Zapisz dokonane zmiany i sprawdź, czy strona poprawnie działa.
Zastanów się nad punktem 15. Jak napisać obsługę zdarzenia? Najpierw należy
skorzystać z przeglądarki klas. Jest ona dostępna po przełączeniu listy właściwości na
listę dokumentacji (zakładka Classes). W polu Enter Name to Search wpisz
RadioButtonList i naciśnij Enter. Szukany symbol pojawi się jako jedyny na liście.
Dwukrotne kliknięcie w niego wyświetli okno z opisem. Należy teraz otworzyć podlistę
Properties i zaznaczyć opcję Show Non-Public Members.
3
Działanie stron ASP.NET. Programowanie zdarzeniowe
Kontrolka RadioButtonList ma to do siebie, że gdy użytkownik zmieni wybraną opcję,
pojawia się zdarzenie SelectedIndexChanged. Jeśli dodana jest procedura obsługi tego
zdarzenia, można wykonać w odpowiedzi jakąś akcję. Przeglądając listę właściwości
kontrolki RadioButtonList można trafić na następujące właściwości o nazwach
rozpoczynających się od Selected: SelectedIndex (numer wybranej opcji liczony od
zera), SelectedItem (wybrany element z listy Items kontrolki) oraz SelectedValue
(właściwość Value wybranego elementu).
Rysunek 5. Opis właściwości SelectedItem kontrolki RadioButtonList
Skoncentrujmy się na właściwości SelectedItem. Kontrolka RadioButtonList
zapamiętuje w tej właściwości aktualnie zaznaczony element. Jak można zauważyć
w opisie właściwości, element ten jest typu ListItem. Kliknięcie w nazwę tego typu także
wyświetla jego opis. Otwierając jego podlistę Properties można znaleźć m.in. właściwości
Selected, Text i Value — takie same jak w oknie, w którym były dodawane do listy
elementów Items kontrolki RadioButtonList (w punkcie 11). Text jest napisem
wyświetlanym w oknie przeglądarki (jeden z operatorów), Value zaś jest opisem
wybranej operacji.
4
Działanie stron ASP.NET. Programowanie zdarzeniowe
Wniosek jest następujący: wyrażenie RblOperacja.SelectedItem.Value będzie opisem,
który został ustawiony w liście elementów (np. [dodawanie] lub [mnożenie]). Żeby
zmienić tekst wyświetlany w lewej dolnej etykiecie, wystarczy przypisać nową wartość
właściwości Text kontrolki LabOperacja. Tak więc cała obsługa zdarzenia sprowadzi się
do jednej linijki:
Przykład 5. Obsługa zdarzenia SelectedIndexChanged dla listy operacji
void RblOperacja_SelectedIndexChanged(object sender, EventArgs e) {
LabOperacja.Text = RblOperacja.SelectedItem.Value;
}
Warto jeszcze zauważyć, że wyrażenie RblOperacja.SelectedItem.Value jest
równoważne z RblOperacja.SelectedValue. Właściwość taka jest dostępna od wersji 1.1
platformy .NET.
5.4. Obliczanie wyniku
Aby tworzony kalkulator w końcu coś policzył, trzeba teraz dodać obsługę przycisku
Wynik. W tym celu wykonaj następujące czynności:
16. Dla przycisku BtnWynik odszukaj na zakładce ze zdarzeniami zdarzenie o nazwie
Click (przycisk wciśnięty). Kliknij w to zdarzenie dwa razy, aby dodać procedurę jego
obsługi.
17. Napisz obsługę zdarzenia zgodnie z punktem  pomysłu działania.
18. Zapisz dokonane zmiany i sprawdź, czy strona poprawnie działa.
Zastanów się nad punktem 18. Oto fakty:
 Skoro kontrolka RblOperacja posiada właściwość SelectedIndex, to można
sprawdzić jej wartość — gdy nie jest zaznaczona żadna opcja wynosi ona –1. Tylko
wtedy, gdy wartość SelectedIndex jest większa lub równa zero warto prowadzić
obliczenia, ponieważ wiadomo, jaki operator jest wybrany.
 Oba pola tekstowe — kontrolki TxtLiczba1 i TxtLiczba2 — mają właściwość Text.
Jest to napis aktualnie wpisany w takie pole.
 W obsłudze zdarzenia możesz zadeklarować lokalne zmienne typu double do
przechowywania wartości liczbowych odczytanych z kontrolek tekstowych oraz
wyniku.
 Do konwersji napisów na liczby możesz skorzystać z klasy Convert, która zawiera
m.in. metodę ToDouble().
5
Działanie stron ASP.NET. Programowanie zdarzeniowe
 Do rozpoznania wybranego operatora możesz użyć instrukcji switch, jako parametr
podając napis z wybranego elementu kontrolki RblOperacja — właściwość
SelectedItem.Text.
 Dla każdego typu operatora (przypadku case) można już obliczyć wartość wyniku.
 Można następnie (po skończeniu instrukcji switch) sformatować odpowiednio
uzyskany wynik tak, aby wyświetlone zostały obie wartości połączone operatorem,
znak równości oraz sam wynik (np. 5 + 3 = 8). Każdy składnik powinien być
oddzielony od swoich sąsiadów przynajmniej jedną spacją.
 Uzyskany napis można wstawić do etykiety LabWynik, ustawiając jej właściwość Text.
5.5. Kontrolki sprawdzające poprawność danych
Mimo sporej funkcjonalności kalkulatora jest on nadal narażony na błędy, spowodowane
wprowadzeniem niepoprawnych danych wejściowych. Wystarczy nie wpisać jednej z liczb
lub podać w jej miejsce napis (np. jakieś imię), aby pojawiły się problemy. Aby
zabezpieczyć stronę przed takimi oczywistymi błędami można skorzystać z gotowego
rozwiązania ASP.NET, a mianowicie kontrolek sprawdzających automatycznie poprawność
danych (ang. validators).
W tym celu wykonaj następujące czynności:
 Kliknij w kontrolkę TxtLiczba1, a następnie naciśnij na klawiaturze strzałkę w prawo.
Kursor zostanie postawiony za polem tekstowym. Wstaw „złamanie” linii, wciskając
kombinację klawiszy Shift + Enter (efektem będzie znacznik <br>).
 Dodaj w tym miejscu kontrolkę RequiredFieldValidator i zmień jej nazwę
(właściwość (ID)) na ReqLiczba1. Wybierz kontrolkę, która ma być sprawdzana,
wskazując we właściwości ControlToValidate kontrolkę TxtLiczba1.
 Wstaw również kontrolkę RequiredFieldValidator za drugim polem tekstowym,
nazywając ją ReqLiczba2 i wskazując do sprawdzania kontrolkę TxtLiczba2.
 Domyślnie kontrolki RequiredFieldValidator zawsze zajmują miejsce na stronie,
nawet gdy ich nie widać. Jeśli chcesz, żeby kontrolki pojawiały się tylko w przypadku
błędnych danych, ustaw ich właściwość Display na Dynamic.
 Podsumowanie właściwości wstawionych kontrolek:
Kontrolka
RequiredFieldValidator
Nazwa kontrolki (ID)
ReqLiczba1
RequiredFieldValidator
ReqLiczba2
6
Nazwa właściwości
ControlToValidate
Display
ErrorMessage
ControlToValidate
Display
Wartość właściwości
TxtLiczba1
Dynamic
wpisz liczbę!
TxtLiczba2
Dynamic
Działanie stron ASP.NET. Programowanie zdarzeniowe
ErrorMessage
wpisz liczbę!
 Sprawdź działanie strony — uruchom ją i wciśnij przycisk Wynik, np. wpisując tylko
jedną liczbę albo bez podania żadnej liczby.
 Strona jednak jeszcze nie jest zabezpieczona przed wpisaniem nieprawidłowych liczb.
Dodaj więc za poprzednimi kontrolkami dodatkowe kontrolki RangeValidator.
Pozwalają one na sprawdzenie, czy wpisana wartość odpowiada żądanemu typowi
danych oraz czy mieści się ona we wskazanym zakresie.
 Podstawowe nowe właściwości wstawionych kontrolek to Type, MinimumValue oraz
MaxiumValue. Proponowane wartości właściwości znajdują się w poniższej tabeli:
Kontrolka
RangeValidator
Nazwa kontrolki (ID)
RngLiczba1
RangeValidator
RngLiczba2
Nazwa właściwości
ControlToValidate
Display
ErrorMessage
Type
MinimumValue
MaximumValue
ControlToValidate
Display
ErrorMessage
Type
MinimumValue
MaximumValue
Wartość właściwości
TxtLiczba1
Dynamic
błędna liczba!
Double
-99999999
99999999
TxtLiczba2
Dynamic
błędna liczba!
Double
-99999999
99999999
 Zapisz stronę i sprawdź, czy poprawnie działa.
 Ostatnim ulepszeniem jest to, że po otrzymaniu wyniku i zmianie operatora (w liście
RblOperacja) w prawej etykiecie LabWynik wyświetlany jest wynik ostatniej operacji.
Jest to niekonsekwencja. Dodaj więc na końcu obsługi zdarzenia
SelectedIndexChanged jedną instrukcję, która będzie przywracać w prawej etykiecie
domyślny napis (...).
7