UWAGA! Promocja dla firm - MICROSOFT OFFICE 365  na 12 miesiecy ZA DARMO! Tylko na CentrumXP.pl!
Wielka promocja Office 365 na CentrumXP.pl!
Do góry Skomentuj

03. Przykłady zastosowania popularnych kontrolek - część I

03. Przykłady zastosowania popularnych kontrolek - część I

Autor: Piotr Gaszewski Opublikowano: 16 grudnia 2005 Odsłon: 134 510

Platforma .NET udostępnia pokaźną ilość kontrolek, które możemy wykorzystywać przy tworzeniu stron internetowych w technologii ASP.NET. Wiele tego typu elementów tworzonych i udostępnianych jest również (darmowo, lub za opłatą) przez niezależne firmy. W rozdziale tym, postaram się zaprezentować zasady działania i wykorzystywania kilku najpopularniejszych kontrolek.

W poprzednim rozdziale naszego kursu, wykorzystywaliśmy obiekt Label, służący do wyświetlania tekstu w oknie przeglądarki internetowej. Po naciśnięciu przycisku następowała zmiana tekstu, wyświetlanego przez tą kontrolkę. Wyobraźmy sobie sytuację, w której użytkownik musi własnoręcznie wprowadzić wymagany tekst. Dzieje się tak ogromnej większości rozmaitych formularzy, umieszczanych na stronach internetowych. Do wprowadzania danych może posłużyć kontrolka TextBox. W Visual Studio stwórzmy nową stronę, która zawierać będzie 3 obiekty typu Label, dwa TextBoxy jeden przycisk Buton. Parametry, które należy zmienić dla każdego z obiektów przedstawiam w poniższej tabeli.

Klasa obiektu ID  Text
Label lblName Imię:
Label lblSurname Nazwisko:
Label lblResults [pozostawiamy puste]
TextBox tbName [pozostawiamy puste]
TextBox tbSurname [pozostawiamy puste]
Button btnSubmit Wyślij

Obiekty te możemy rozmieścić na formatce w następujący sposób:

 

Użytkownik powinien wprowadzić swoje imię i nazwisko w odpowiednich TextBoxach. Po naciśnięciu przycisku „Wyślij", chcemy wyświetlić wprowadzone dane w dolnej części ekranu. Metoda wywoływana w momencie naciśnięcia przycisku wyglądać będzie następująco:

protected void btnSubmit_Click(object sender, EventArgs e)
{
            this.lblResults.Text = "Użytkownik: " + this.tbName.Text + " " + this.tbSurname.Text;
            this.tbName.Text = "";
            this.tbSurname.Text = "";
}

Pierwsza linia kodu kopiuje zawartość tekst wpisany do pól tekstowych przez użytkownika. Kolejne wyczyszczą ich zawartość.

Strona startowa:

Po naciśnięciu przycisku „Wyślij":

Jeżeli chcesz, aby elementy strony rozmieszczone były równo, najprostszym rozwiązaniem będzie umieszczenie ich w tabeli html, dostępnej w pasku narzędziowym (zakładka: „HTML").

Wyobraźmy sobie teraz sytuację, w której użytkownik, obok swoich danych pragnie wprowadzić ilość produktów, które prawnie zakupić. Pierwszym krokiem, który musi uczynić, jest wybranie dostępnych produktów, kolejnym natomiast wprowadzenie ich liczby i naciśnięcie przycisku „Wyślij". Do realizacji tego zadania możemy wykorzystać kontrolki o nazwie CheckBox. W oknie Visual Studio zmodyfikujmy zawartość formatki w następujący sposób:

Załóżmy, że CheckBoxy odpowiadające kolejnym książką, będą nazywać się odpowiednio: CheckBox1, CheckBox2 i CheckBox3, natomiast TextBoxy: TextBox1, TextBox2, TextBox3. Ponadto dla wszystkich pól tekstowych, służących do wprowadzania liczby egzemplarzy książek, ustawiamy w oknie „Properties" wartość właściwości „Visible" na false.

Dodajmy teraz do naszej klasy reprezentującej formatkę metodę TotalCost. Metoda ta, sprawdza, w którymś z pól tekstowych podana została liczba egzemplarzy i zwraca całkowity koszt zakupu lub -1 w przypadku, kiedy żadne z pól nie zostało wypełnione. Dla ułatwienia przyjmijmy, że każda z książek kosztuje 20 zł.

int TotalCost()
{
            if ((this.TextBox1.Text.Trim() == "") && (this.TextBox2.Text.Trim() == "") && (this.TextBox3.Text.Trim() == ""))
            {
                       return -1;
            }

            int totalCost = 0;
            if (this.TextBox1.Text != "")
            {
                       totalCost += 20 * System.Int32.Parse(this.TextBox1.Text);
            }
            if (this.TextBox2.Text != "")
            {
                       totalCost += 20 * System.Int32.Parse(this.TextBox2.Text);
            }
            if (this.TextBox3.Text != "")
            {
                       totalCost += 20 * System.Int32.Parse(this.TextBox3.Text);
           
}
            return totalCost;
}

Wykorzystywana w odniesieniu do zawartości każdego z TextBoxów funkcja Trim() powoduje obcięcie początkowych i końcowych pustych znaków (tzn. „spacji, tabulatorów itp.). Uwaga – metoda ta nie sprawdza w jakikolwiek sposób, czy podany ciąg znaków jest naprawdę liczbą. W przypadku wpisania znaku, który nie jest liczbą mogą wystąpić błędy. W czasie tworzenia „prawdziwej" aplikacji koniecznie musimy zaimplementować sprawdzanie wejściowego ciągu.

Kolejnym krokiem, jest modyfikacja zawartości funkcji Page_Load oraz btnSubmit_Click, uruchamianej w momencie naciśnięcia przycisku „Wyślij".

    protected void Page_Load(object sender, EventArgs e)
    {
            if(this.CheckBox1.Checked)
            {
                       this.TextBox1.Visible = true;
            }
            if (this.CheckBox2.Checked)
            {
                       this.TextBox2.Visible = true;
            }
            if (this.CheckBox3.Checked)
            {
                       this.TextBox3.Visible = true;
            }
    }

    protected void btnSubmit_Click(object sender, EventArgs e)
    {
            if (this.TotalCost() != -1)
            {
                       this.lblResults.Text = "Użytkownik: " + this.tbName.Text + " " + this.tbSurname.Text;
                       this.lblResults.Text += "<BR>"  + "Calkowity koszt zakupu: " + this.TotalCost().ToString();
                       this.tbName.Text = "";
                       this.tbSurname.Text = "";
          
}
    }

Za każdym razem w momencie uruchomienia strony sprawdzane jest, które z checkBoxów zostały zaznaczone (służy do tego właściwość Checked tych obiektów). Jeśli wybrana została któraś z książek po przeładowaniu pojawia się przy niej pole gdzie możemy wprowadzić liczbę zamawianych egzemplarzy. W przypadku, kiedy przynajmniej jeden z textBox’ów, powiązanych z książkami, został wypełniony, po naciśnięciu przycisku „Wyślij" następuje wyświetlenie danych użytkownika, oraz całkowitego kosztu zamówionych książek.

Tak wygląda strona po pierwszym załadowaniu:

Po zaznaczeniu wybranych tytułów i kliknięciu przycisku „wyślij", po przeładowaniu strony pojawią się pola, w których możemy podać liczbę egzemplarzy:

Wyrażamy chęć zakupu jednego egzemplarza obu pozycji. Aplikacja wyświetla nasze dane i oblicza koszt zakupu:

Wyobraźmy sobie sytuację, w której internetowa księgarnia oferuje 10% zniżki przy zakupie dla określonej grupy klientów. Przyjmijmy, że będą to posiadacze karty stałego klienta. Dodajmy na formatce obiekt DropDownList, który odpowiada za wyświetlanie listy rozwijalnej. Po przeciągnięciu obiektu na formatkę pojawi się okienko zatytułowane „DropDownList Task", w którym wybieramy opcję „Edit Items". W oknie, które się teraz pojawi („ListItem Collection Editor") dodajmy dwa nowe pola – pierwsze o parametrach Text = "Nie posiadam karty stałego klienta", Value = 0 – oraz drugie – Text = "Posiadam kartę stałego klienta", Value = 1

Po kliknięciu ok., musimy jeszcze wprowadzić zmiany w metodzie TotalCost.

int TotalCost()
{
            if ((this.TextBox1.Text.Trim() == "") && (this.TextBox2.Text.Trim() == "") && (this.TextBox3.Text.Trim() == ""))
            {
                       return -1;
            }
            int totalCost = 0;
            if (this.TextBox1.Text != "")
            {
                       totalCost += 20 * System.Int32.Parse(this.TextBox1.Text);
            }
            if (this.TextBox2.Text != "")
            {
                       totalCost += 20 * System.Int32.Parse(this.TextBox2.Text);
            }
            if (this.TextBox3.Text != "")
            {
                       totalCost += 20 * System.Int32.Parse(this.TextBox3.Text);
            }
            if (this.DropDownList1.SelectedValue == "1")
            {
                        totalCost = (9 * totalCost) / 10;
           
}
            return totalCost;
}

Przed zwróceniem wartości całkowitego kosztu zakupu program sprawdza, czy użytkownik nie wybrał opcji  "Posiadam kartę stałego klienta". W tym przypadku całkowity koszt zakupu zostaje zmniejszony o 10%.

Zobacz również

Komentarze

punkt 3,2strona 2 linijka;Wyobraźmy sobie teraz sytuację, w której użytkownik, obok swoich danych pragnie wprowadzić ilość produktów, które ***>prawnie<**** zakupić.
beta, 22 maja 2006, 10:01
Beta hmm...no a lepiej zeby uzytkownik kupowal bez-prawnie ? hihihihi :-P Piotrze, Kurs super, od jakiegos czasu podchodzilem do ASP.NET jak do jeza, a tu prosze, szybko, milo i bardzo przystepnie :-) dzieki!
Xargh, 14 lipca 2006, 13:47
nie rozumiem gdzie trzeba wpisac ta metode TotalCost... czy ktos moglby mi to wyjasnic... juz sie troche z tym mecze i caly czas nie dziala... help me!!!!!!!!!!!!
szymon, 17 lipca 2006, 14:11
Szymon - jesli stworzyles strone o nazwie np. Default.aspx to pod nia masz plik Default.aspx.cs to wlasnie w tym pliku trzymasz kod C# swojej strony czyli wlasnie tam musisz dopisac funkcje TotalCost. U mnie wszystko chodzi bez problemu, wiec jak cos to wal na xargh@yahoo.co.uk
Xargh, 17 lipca 2006, 16:53
A ja znowu nie wiem, gdzie wpisać Protected void btnSubmit_Click... Wiem, że w pliku Default.aspx.cs, ale gdzie dokładnie? gdzie bym tego nie wstawił, to podkreśla mi kod, czyli to chyba znaczy, że jest źle... Już nie mam więcej patentów.
Czmielu, 22 lipca 2006, 17:34
Wydaje mi się, że przyszło mi pracować na jakiejś innej wersji programu, czy coś w tym rodzaju, bo struktura pliku Default.aspx.cs jest inna niż wnioskuje u Was :/ Proszę o szybką pomoc...
Czmielu, 22 lipca 2006, 17:48
u mnie tez jest chyba troche inaczej.........
szymon, 24 lipca 2006, 15:25
Witam a mi przy metodzie totalCost wywala błąd: if ((this.TextBox1... zatrzymuje się przy this i mówi że po lewej stronie wyrażenia musi być zmienna.... prosze o pomoc (mam uczelnianego VS2005 - chyba developer edition)
kamel, 2 sierpnia 2006, 08:35
a u mnie po wprowadzeniu wszystkich komend tak jak autor kursu opisał, po wyswietleniu stronki i kliknieciu wyślij nie pojawiają się nigdzie dane które wpisałem w okienka ani koszt książek. Prosze o jakąś informacje.
kuku, 11 września 2006, 15:48
Bo metoda TotalCost oblicza tylko cene,jesli czytasz kursy po kolei to zorientujesz się (pownienieś;) że musisz dodać obsługe zdarzenia OnClick żeby wyświetłało ci: protected void Button1_Click(object sender, EventArgs e) { //Jakis label,ktory ma wyswietlic wynik LabelWyswietlWynik.Text=Label1.Text+" "+Label2.Text+" masz zaplacic"+totalCost.ToString(); } Aha znajomość C# to podstawa w ASP.NET (no mozna VB.Net ewentualnie)
PanBogactwa, 16 września 2006, 00:12
Ten kod z Page_Load(..) lepiej by wyglądał tak: protected void Page_Load(object sender, EventArgs e) { this.TextBox1.Visible = this.CheckBox1.Checked; this.TextBox2.Visible = this.CheckBox2.Checked; this.TextBox3.Visible = this.CheckBox3.Checked; }
AdamW, 18 maja 2007, 18:53
heeh ja pisze w AS (Action Script 2.0) strasznie to podobne :P łatwo się przyswaja a w programie jest naprawdę wszystko podane na talerzu ;"> heh jeszcze tylko przelecę language reference i umiem ASP :P w stopniu podstawowym ofkors :P
hax0r, 16 czerwca 2007, 01:53
Trochę bez sensu z tym zaznaczaniem Checkboxow, dlaczego musimy przeładowywać stronę, to zupełnie niepraktyczne, nie da się tego zrealizować bez przeładowywania strony, tak na samo klikniecie w CheckBoxa ??
Paweł, 12 września 2007, 13:37
Error 1 "_Default.TotalCost()" is a "method", which is not valid in the given context mnie sie wysietla cos takiego, mimo ze zrobilem tak jak trzeba!(chyba) czy ktos moze pomoc?
preses, 4 października 2007, 21:36
Dodałem metodę protected void CheckBox1_CheckedChanged(object sender, EventArgs e) { this.TextBox1.Visible = !(this.TextBox1.Visible); } I nie wiem dlaczego to działa dopiero po kliknięciu buttona?
pulkownik, 6 listopada 2007, 20:14
Paweł: Trochę bez sensu z tym zaznaczaniem Checkboxow, dlaczego musimy przeładowywać stronę, to zupełnie niepraktyczne, nie da się tego zrealizować bez przeładowywania strony, tak na samo klikniecie w CheckBoxa ?? Da się. Przy widoku "Design" kliknij na CheckBoxa i w "Properties" dla opcji AutoPostBack ustaw wartość "True" (zrób tak dla każdego z trzech CheckBoxów).
Qba, 16 listopada 2007, 23:43
respect, podoba mi się bardzo, masz dobrze wytłumaczone, oby więcej takich stronek i ludzi którzy je tworzą
ziomek, 6 lutego 2008, 20:12
Line 21: if (this.TextBox3.Text != "") Line 22: { Line 23: totalCost += 20 * System.Convert.ToInt32(TextBox1.Text); Line 24: } Line 25: if (this.TextBox4.Text != "")
Chester, 20 lutego 2008, 12:49
dopiero po wcisnieciu wyslij mi sie pojawia aktywny TextBox do wpisania liczby egzemplarzy.ktos wie jak to poprawic?
olek, 27 maja 2008, 17:18
Chciałbym się podzielic tym, co zauważyłem. otóż próbowałem zrobic wiele razy pierwszy przykład zastosowania popularnych kontrolek (na stronie numer jeden, artykuł 03). używając zwrotu: protected void btnSubmit_Click(object sender, EventArgs e) strona nie działa jak powinna. Nie wyświetlają się dane o użytkowniku, a text boxy pozostają wypełnione. zadziałało mi dopiero z małą korektą: protected void btnSubmit_Click1(object sender, EventArgs e) Nie wiem dlaczego tak jest. czy ktoś ma podobny problem, lub zna odpowiedź dlaczego tak się dzieje ?
Noobek, 17 czerwca 2008, 18:19
we wlasciwosciach Checkboxa ustawcia wartosc Autopostback na true wtedy z zaznaczeniem automatycznie przejaldowuje strone, dziala to rowniez z innymi kontrolkami i bardzo sie przydaje

Marcel, 30 października 2008, 21:53
A wie ktoś jak zrobić ,żeby po odznaczeniu checkboxa znikal textbox??

rafał, 15 listopada 2008, 15:16
Do Noobek: Miałem to samo, tez jestem poczatkujący. Trzeba "związać" przycisk z metodą btnSubmit_Click w następujący sposób: Zaznaczyć przycisk i w oknie "Properties" nacisnąć przycisk z żółtą błyskawicą (Events). Tam we właściwości "Click" należy wybrać z listy metodę btnSubmit_Click

łysy, 16 listopada 2008, 12:17
Zamiast modyfkować metode Page_Load, można zrobic trzy metody (po dwukrotnym kliknięciu na CheckBoxy utworzy się szkielet):
 
protected void CheckBox1_CheckedChanged(object sender, EventArgs e)&lt;br />{&lt;br />     TextBox3.Visible = CheckBox1.Checked;&lt;br />}
 
takie podejście wraz z autoPostBack spowoduje chowanie sie textBoxow w zaleznosci od zaznaczonego checkBoxa.

Poohaty, 10 marca 2009, 16:25
Dokładnie . Jedynie co można się doczepić , to niech TextBox1.Visible = CheckBox1.Checked ; Ale to pierdoła. Bardzo dobry kurs .&lt;br />


Saya, 30 lipca 2009, 17:25
Czyli jakby ktoś sie pogubił.
dla 3 checkboxów
 
protected void CheckBox1_CheckedChanged(object sender, EventArgs e)&lt;br />  {&lt;br />  TextBox1.Visible = CheckBox1.Checked;&lt;br />  }&lt;br />oraz w properties ustawić autopostback = true, w zdarzeniach Load = CheckBox1_CheckedChanged
wtedy klika :)

xman, 13 września 2009, 11:00
Metoda TotalCost jest pod wzgklędme konserwacji i wydajnosci niezbyt dobrze napisana - Wyobraźcie sobie 500 tytułów - sprawdzanie kazego z 500 textboxów będzie błędem - zróbmy tak :
 
 private Int32 TotalCost()
    {
        Int32 TotalIlosc = 0;
 
        for (int i = 0; i < this.Form.Controls.Count - 1; i++)
        {
 
            if (this.Form.Controls.GetType().Name.CompareTo("TextBox") == 0)
            {
                TextBox T = (TextBox)this.Form.Controls;
                if (T.Text == "")
                    T.Text = "0";
                else
                    TotalIlosc = TotalIlosc + Convert.ToInt32(T.Text);
            }
        }
        return TotalIlosc;
    }

 
i w zdarzeniu Button1_Click1 :
Label4.Text  =Convert.ToString(20*TotalCost());

 
Metoda totalCost nie ulegnie wydłużaniu w miare dodawania textboxów - oczywiscie metoda nie obsługuje kontroli nie wprowadzenia cyfry ale to kurs nie chodzi o wyjasnienie mechanizmu

Christoff, 28 września 2009, 08:25
protected void CheckBox1_CheckedChanged(object sender, EventArgs e)&lt;br />{&lt;br />     TextBox3.Visible = CheckBox1.Checked;&lt;br /> [size= x-small; color: #0000ff">[color=#0000ff">&lt;font size="2" color="#0000ff">this [/color">[color=#0000ff">  [/color">

}                                                                                                        
jeśl dodamy to linijke po zniknieciu textboxa wcześniej wpisana wartość niebędzie się wliczała do totalcost.
[size= x-small">.TextBox3.Text = [/size">[size= x-small; color: #a31515">""[/size">
[size= x-small">; [/size">
Przemek, 30 listopada 2009, 14:22
Mi sie podoba ten kurs, poki trzymacie sie sztywno planu punkt po punkcie(po malu) to wszystko chodzi,wspoldziala,dziala jak nalezy;-) Pozdro C#
Darius, 6 stycznia 2010, 03:59
Kurs dobry, dzieki...
Anonimous, 10 sierpnia 2010, 15:22
a ja to zrobiłem o wiele prościej i też działa using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; public partial class Default2 : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } protected void T_TextChanged(object sender, EventArgs e) { } protected void Button1_Click(object sender, EventArgs e) { // if ((this.TextBox1.Text.Trim() == "") && (this.TextBox2.Text.Trim() == "") && (this.TextBox3.Text.Trim() == "")) //{ // return -1; //} int totalCost = 0; if (this.TextBox1.Text != "") { totalCost += 20 * System.Int32.Parse(this.TextBox1.Text); } if (this.TextBox2.Text != "") { totalCost += 20 * System.Int32.Parse(this.TextBox2.Text); } if (this.TextBox3.Text != "") { totalCost += 20 * System.Int32.Parse(this.TextBox3.Text); } this.lblResults.Text = "Użytkownik: " + this.tbName.Text + " " + this.tbSurname.Text + " do zapłaty = " + totalCost.ToString(); this.tbName.Text = ""; this.tbSurname.Text = ""; } }
Moon84, 20 stycznia 2012, 14:55

Dodaj swój komentarz

Zasady publikacji komentarzyZasady publikacji komentarzy

Redakcja CentrumXP.pl nie odpowiada za treść komentarzy publikowanych na stronach Portalu
i zastrzega sobie prawo do usuwania wypowiedzi, które:

  • zawierają słowa wulgarne, obraźliwe, prowokujące i inne naruszające dobre obyczaje;
  • są jedynie próbami reklamowania stron internetowych (spamowanie poprzez umieszczanie linków);
  • przyczyniają się do złamania prawa bądź warunków licencyjnych oprogramowania (cracki, seriale, torrenty itp.);
  • zawierają dane osobowe, teleadresowe, adresy mailowe lub numery GG;
  • merytorycznie nie wnoszą nic do dyskusji lub nie mają związku z tematem komentowanego newsa, artykułu bądź pliku.

Autor:

Komentarz:

Dodaj komentarz