ITA 103 Modul11

background image

ITA-103 Aplikacje Internetowe

Piotr Bubacz

Moduł 11

Wersja 1

Zarządzanie stanem w aplikacjach

ASP.NET

Spis treści

Zarządzanie stanem w aplikacjach ASP.NET ........................................................................................ 1

Informacje o module ........................................................................................................................... 2

Przygotowanie teoretyczne ................................................................................................................. 3

Przykładowy problem ................................................................................................................. 3

Podstawy teoretyczne ................................................................................................................. 3

Uwagi dla studenta ..................................................................................................................... 4

Dodatkowe źródła informacji ...................................................................................................... 4

Laboratorium podstawowe ................................................................................................................. 6

Problem 1 (czas realizacji 5 min) ................................................................................................. 6

Problem 2 (czas realizacji 15 min) ............................................................................................... 7

Problem 3 (czas realizacji 25 min) ............................................................................................... 9

background image

Piotr Bubacz

Moduł 11

ITA-103 Aplikacje Internetowe

Zarządzanie stanem w aplikacjach ASP.NET

Strona 11-2

Informacje o module

Opis modułu

W tym module znajdziesz informacje dotyczące możliwości zarządzania
stanem w aplikacjach ASP.NET. Nauczysz się przechowywad zmienne i
obiekty w stanie sesji i aplikacji. Zobaczysz, w jaki sposób można dodawad,
zarządzad i usuwad obiekty z tych stanów.

Cel modułu

Celem modułu jest przedstawienie możliwości wykorzystania stanu aplikacji
i sesji do przechowywania zmiennych i obiektów.

Uzyskane kompetencje

Po zrealizowaniu modułu będziesz:

rozumiał potrzebę przechowywania wybranych informacji w stanie
aplikacji i sesji

potrafił dodawad zmienne i obiekty do stanu sesji i aplikacji

wiedział jak utworzyd obiekty i zmienne przy starcie aplikacji i sesji

Wymagania wstępne

Przed przystąpieniem do pracy z tym modułem powinieneś:

znad podstawy języka XHTML

znad zasady pracy w środowisku Visual Studio, w szczególności
tworzenia stron internetowych

Mapa zależności modułu

Zgodnie z mapą zależności przedstawioną na Rys. 1, przed przystąpieniem
do realizacji tego modułu należy zapoznad się z materiałem zawartym
w modułach „Podstawy HTML” i „Wprowadzenie do ASP.NET”.

MODUŁ 11

MODUŁ 14

MODUŁ 3

MODUŁ 6

MODUŁ 1

MODUŁ 5

MODUŁ 2

MODUŁ 4

MODUŁ 8

MODUŁ 9

MODUŁ 10

MODUŁ 12

MODUŁ 13

Rys. 1 Mapa zależności modułu

background image

Piotr Bubacz

Moduł 11

ITA-103 Aplikacje Internetowe

Zarządzanie stanem w aplikacjach ASP.NET

Strona 11-3

Przygotowanie teoretyczne

Przykładowy problem

Tworząc aplikacje internetową większośd informacji przechowujemy w bazie danych. Czasami
wykorzystujemy pliki XML. Jednak są sytuacje, kiedy potrzebujemy szybkiego narzędzia do
przechowywania i zarządzania danymi. Jeśli implementujemy koszyk zakupów czy licznik na stronie,
to zapisywanie ich do bazy czy pliku XML jest zbyt długie. Do tego celu musimy wykorzystad inny
mechanizm.

Podstawy teoretyczne

W aplikacjach ASP.NET często zachodzi potrzeba przechowywania stanu, np. pomiędzy żądaniami
pojedynczego użytkownika. Niestety protokół HTTP, z pomocą którego realizowana jest
komunikacja klienta z serwerem, jest bezstanowy. Oznacza to, że HTTP nie pozwala określid, czy
dwa żądania zostały wykonane przez tego samego, czy przez dwóch różnych użytkowników. Każde
nowe żądanie jest traktowane tak, jakby pochodziło od zupełnie nowego użytkownika.

W poprzednich modułach pokazana została możliwośd przekazywania informacji pomiędzy
stronami w postaci parametrów wywołania, metoda ta ma jednak wiele wad. Podstawową z nich
jest małe bezpieczeostwo tak przekazywanych informacji, a także ograniczenie ilości danych, jakie
mogą zostad przesłane.

Stan obiektu tworzą: jego konfiguracja, atrybuty, warunki lub informacje o zawartości. W
aplikacjach internetowych stan jest ulotny i ograniczony do wygenerowania dokumentu po stronie
serwera i przesłania go do użytkownika. W ASP.NET istnieje wiele mechanizmów przechowywania i
zarządzania stanem, które można podzielid ze względu na kilka kryteriów: zasięg, czas życia i
dopuszczalny rozmiar przechowywanych danych oraz po jakiej stronie są przechowywane. Wśród
mechanizmów pozwalających zarządzad stanem indywidualnie dla każdego użytkownika wymienid
można: parametry wywołania i pliki cookies po stronie klienta oraz stan strony (ViewState), stan
sesji i stan aplikacji po stronie serwera. Przykładem informacji, która powinna byd przechowywana
w stanie sesji, jest zawartośd koszyka zakupów użytkownika, w stanie aplikacji możemy z kolei
przechowywad np. informacje o liczbie odwiedzin naszej strony.

Stan aplikacji
Współdzielenie

informacji

w

całej

aplikacji

jest

możliwe

przy

użyciu

klasy

HttpApplicationState. Klasa ta pozwala przechowywad zmienne w słowniku – kolekcji par
klucz-wartośd. Zmienne te są widoczne w obszarze całej aplikacji ASP.NET.

Używając stanu aplikacji do przechowywania obiektów musisz wziąd pod uwagę kilka istotnych
kwestii:

Zasoby – ponieważ stan aplikacji jest przechowywany w pamięci, mamy do niego szybki
dostęp, w odróżnieniu od danych na dysku czy w bazie danych. Niestety przechowywanie
dużych bloków danych w stanie aplikacji może wypełnid pamięd serwera i spowodowad
zapisywanie pamięci na dysku.

Ulotnośd – ponieważ stan aplikacji jest przechowywany w pamięci, jest usuwany z niej w
momencie zatrzymania lub restartu aplikacji lub w momencie awarii serwera.

Skalowalnośd – stan aplikacji nie jest dzielony na serwery w farmie serwerów, więc jeśli
Twoja aplikacja ma działad w środowisku wielu serwerów, to nie powinieneś wykorzystywad
stanu aplikacji.

Współbieżnośd – do stanu aplikacji może jednocześnie odwoływad się wiele wątków, dlatego
ważne jest zapewnienie mechanizmów bezpiecznej aktualizacji przechowywanych obiektów.

Tworzenie zmiennych stanu aplikacji jest możliwe poprzez obiekt Application. Przykład
utworzenia zmiennych aplikacji o nazwach info i AppStartTime:

background image

Piotr Bubacz

Moduł 11

ITA-103 Aplikacje Internetowe

Zarządzanie stanem w aplikacjach ASP.NET

Strona 11-4

Application["info"] = "Witaj świecie";
Application["AppStartTime"] = DateTime.Now;

Pobranie wartości tak utworzonej zmiennej stanu sesji można zrealizowad za pomocą następującej
konstrukcji:

string info = (string) Application["info"];
DateTime AppStartTime = (DateTime) Application["AppStartTime"];

Stan sesji
Tworzenie zmiennych stanu sesji jest możliwe poprzez obiekt Session. Przykład utworzenia nowej
zmiennej stanu sesji o nazwie info, przechowującej łaocuch znaków o treści „Witaj świecie!”:

Session["info"] = "Witaj świecie!";

Pobranie wartości tak utworzonej zmiennej stanu sesji można zrealizowad za pomocą następującej
konstrukcji:

string info = (string) Session["info"];

Przechowywanie i pobieranie złożonych danych, tj. obiektów, wymaga rzutowania do
odpowiedniego typu. Przykład zapisania obiektu typu Koszyk w zmiennej stanu sesji:

koszyk = new Koszyk();
Session["koszyk"] = koszyk;

Przykład odczytu zmiennej stanu sesji typu Koszyk:

koszyk = (Koszyk) Session["koszyk"];

Global Application Class
Plik Global.asax umożliwia deklarowanie i zarządzanie zdarzeniami na poziomie aplikacji i sesji. Jest
on umieszczony w głównym katalogu aplikacji. Podczas wykonywania plik jest parsowany i
kompilowany w dynamiczną klasę dziedziczoną z klasy bazowej HttpApplication.

Podsumowanie
W tym rozdziale przedstawione zostały podstawy pracy ze stanem sesji i aplikacji.

Uwagi dla studenta

Jesteś przygotowany do realizacji laboratorium jeśli:

potrafisz dodawad, odczytywad, zmieniad i usuwad obiekty ze stanu sesji i aplikacji

wiesz do czego służy i co zawiera plik Global.asax

Pamiętaj o zapoznaniu się z uwagami i poradami zawartymi w tym module. Upewnij się, że
rozumiesz omawiane w nich zagadnienia. Jeśli masz trudności ze zrozumieniem tematu zawartego
w uwagach, przeczytaj ponownie informacje z tego rozdziału i zajrzyj do notatek z wykładów.

Dodatkowe źródła informacji

1. Design and Implementation Guidelines for Web Clients, http://msdn2.microsoft.com/en-

us/library/ms978622.aspx

Zespół patterns & practices przygotował wskazówki dotyczące planowania,
implementacji i zarządzania stanem w aplikacjach ASP.NET. Na stronie znajdziesz
dobre praktyki zarządzania stanem.

2. ASP.NET Application State, http://msdn.microsoft.com/en-us/library/bf9xhdz4.aspx

Na stronie przedstawiono szczegółowe informacje dotyczące zarządzania stanem w
aplikacjach ASP.NET.

background image

Piotr Bubacz

Moduł 11

ITA-103 Aplikacje Internetowe

Zarządzanie stanem w aplikacjach ASP.NET

Strona 11-5

3. Randy Connolly, ASP.NET 2.0. Projektowanie aplikacji internetowych, Helion, 2008

W książce autor szczegółowo porusza kwestie związane ze stanem sesji. Znajdziesz
tu m.in. informacje dotyczące dostawców stanu sesji.

4. Stephen Walther, ASP.NET 2.0. Księga eksperta, Helion, 2007

W książce autor przedstawił informacje związane z wykorzytsaniem stanu sesji i
aplikacji. Znajdziesz tu m.in. informacje dotyczące używania stanu sesji bez
wykorzystywania mechanizmu cookies.

background image

Piotr Bubacz

Moduł 11

ITA-103 Aplikacje Internetowe

Zarządzanie stanem w aplikacjach ASP.NET

Strona 11-6

Laboratorium podstawowe

Problem 1 (czas realizacji 5 min)

Już jesteś na ukooczeniu strony. Twój klient jednak ciągle dodaje coś nowego do funkcjonalności.
Teraz postanowił sprawdzad ilośd osób odwiedzających jego stronę. Musisz zaimplementowad
licznik, który będzie pokazywał ilośd osób aktualnie przeglądający stronę oraz ilośd wszystkich osób,
które odwiedziły stronę.

Zadanie

Tok postępowania

1. Dodaj do
aplikacji plik
Global Application
Class

Otwórz projekt przygotowany na poprzednich zajęciach.

Następnie wybierz Website -> Add New Item.

W oknie Templates wybierz Global Application Class, w polu Name
wpisz Global.asax, a w liście rozwijanej Language wybierz C#.

2. Dodaj obsługę
licznika w pliku
Global Application
Class

W pliku Global.asax w metodzie Application_Start utwórz dwie
zmienne aplikacji: userCount oraz activeUserCount. Zainicjuj je
wartością 0:

Application["userCount"] = 0;
Application["activeUserCount"] = 0;

W metodzie Session_Start zwiększ o jeden wartości obu utworzonych
zmiennych:

int userCount = (int) Application["userCount"];
userCount++;
Application["userCount"] = userCount;
int activeUserCount = (int) Application["activeUserCount"];
activeUserCount++;
Application["activeUserCount"] = activeUserCount;

W metodzie Session_End zmniejsz o jeden ilośd aktywnych
użytkowników:

int activeUserCount = (int) Application["activeUserCount"];
activeUserCount--;
Application["activeUserCount"] = activeUserCount;

3. Utwórz nową
kontrolkę
użytkownika
zawierqającą
licznik

Utwórz nową kontrolkę użytkownika i nazwij ją Licznik.ascx.

W widoku Source dodaj następujący fragment:

Naszą stronę odwiedziło:
<asp:Label ID="licznikLabel" runat="server" /><br />
Aktualnie przebywa na stronie:
<asp:Label ID="licznikActiveLabel" runat="server" />

Do metodzie Page_Load kontrolki dodaj kod programu odpowiedzialny
za pobranie i wyświetlenie w odpowiednich kontrolkach Label wartości
zmiennych aplikacji:

if (!IsPostBack)
{
licznikLabel.Text = Application["userCount"].ToString();
licznikActiveLabel.Text =
Application["activeUserCount"].ToString();
}

Umieśd kontrolkę na stronie wzorcowej. Sprawdź poprawnośd
wskazywania ilości użytkowników. Aby zwiększyd ilośd użytkowników
należy otworzyd dowolną stronę aplikacji w innej przeglądarce.

background image

Piotr Bubacz

Moduł 11

ITA-103 Aplikacje Internetowe

Zarządzanie stanem w aplikacjach ASP.NET

Strona 11-7

Problem 2 (czas realizacji 15 min)

Nadszedł czas na największe wyzwanie. Twoim zdaniem jest obsługa koszyka zakupów dla klientów
strony. Musisz najpierw przygotowad stronę, która będzie wyświetlała zawartośd koszyka. Twój
klient musi mied możliwośd zmiany ilośd poszczególnych produktów, jak i usuwania. Wraz z
zespołem zastanawiałeś się, jak zrealizowad dodawanie produktów do koszyka i doszliście do
wniosku, że najlepiej i najprościej będzie dodawad je przez parametr ProdID wywołania strony.
Nie zapomnij o uzupełnieniu stron wyświetlających produkty o możliwośd dodawania ich do
koszyka. Wyświetl w menu możliwośd przeglądania koszyka, jak i usuwania całej jego zawartości.

Zadanie

Tok postępowania

1. Dodaj plik i
kontrolkę
wyświetlającą
zawartośd koszyka

Do projektu dodaj plik Zakupy.aspx oparty na szablonie
SzablonStrony.master.

Umieśd na stronie kontrolkę GridView. W oknie Properties:

— w polu ID wpisz KoszykGridView
— w polu EmptyDataText wpisz Twój koszyk jest pusty
— w polu EnableViewState z listy rozwijanej wybierz False

Kliknij Smart Tag kontrolki KoszykGridView i wybierz Edit Colmuns.

W obszarze Aviailable Fields wybierz BoundField i kliknij Add. W
obszarze BoundField Properities:

— w polu HeaderText wpisz Nazwa produktu
— w polu DataField wpisz Nazwa
— w polu ReadOnly z listy rozwijanej wybierz True

W obszarze Aviailable Fields wybierz BoundField i kliknij Add. W
obszarze BoundField Properities:

— w polu HeaderText wpisz Cena
— w polu DataField wpisz Cena
— w polu DataFormatString wpisz {0:c}
— w polu HtmlEncode z listy rozwijanej wybierz False
— w polu ReadOnly z listy rozwijanej wybierz True

W obszarze Aviailable Fields wybierz BoundField i kliknij Add. W
obszarze BoundField Properities:

— w polu HeaderText wpisz Ilośd sztuk
— w polu DataFormatString wpisz {0:d}
— w polu DataField wpisz IloscSztuk

W obszarze Aviailable Fields wybierz BoundField i kliknij Add. W
obszarze BoundField Properities:

— w polu DataField wpisz Suma
— w polu DataFormatString wpisz {0:c}
— w polu HeaderText wpisz Wartośd
— w polu HtmlEncode z listy rozwijanej wybierz False
— w polu ReadOnly z listy rozwijanej wybierz True

2. Dodaj do
kontrolki
GridView przyciski
do edycji i
usuwania

W obszarze Aviailable Fields wybierz CommandField i kliknij Add. W
obszarze CommandField Properities:

— w polu ButtonType z listy rozwijanej wybierz Button
— w polu ShowDeleteButton z listy rozwijanej wybierz True
— w polu ShowEditButton z listy rozwijanej wybierz True

background image

Piotr Bubacz

Moduł 11

ITA-103 Aplikacje Internetowe

Zarządzanie stanem w aplikacjach ASP.NET

Strona 11-8

rekordów

— w polu CancelText wpisz Anuluj
— w polu DeleteText wpisz Usuo towar
— w polu EditText wpisz Zmieo ilośd
— w polu UpdateText wpisz Aktualizuj

Dodaj kontrolkę Button i w oknie Properties:

— w polu ID wpisz kasaButton
— w polu PostBackUrl wpisz ~/Zamowienie.aspx
— w polu Text wpisz Do kasy

Zapisz zmiany.

3. Rozszerz
aplikacje
możliwośd
dodawania
produktów do
koszyka

Otwórz stronę Produkty.aspx. W widoku Design kliknij Smart Tag
kontrolki ProduktyGridView i wybierz Edit Columns. Z list Available
fields
wybierz HyperLinkField i wciśnij Add. W oknie HyperLinkField
properities:

— w polu DataNavigateUrlFields wpisz ProductID
— w polu DataNavigateUrlFormatString wpisz ~/Zakupy.aspx?id={0}
— w polu HeaderText wpisz Dodaj do koszyka

Otwórz stronę Szczegoly.aspx. W widoku Source przed znacznikiem
</asp:View> kontrolki View o ID="prawidlowyView" dodaj:

<asp:HyperLink ID="KoszykHyperLink" runat="server"
Text="Dodaj do koszyka" /> <br />

Otwórz plik Szczegoly.aspx.cs i wewnątrz bloku if (produkt!=null) dodaj:

KoszykHyperLink.NavigateUrl = "~/Zakupy.aspx?ProdID=" +
produkt.ProductID;

Otwórz plik Web.sitemap. Do głównego elementu za elementem
wyświetlającym menu produktów dodaj:

<siteMapNode title="Koszyk" description="Zarządzaj koszykiem"
roles="*">
<siteMapNode url="Zakupy.aspx" title="Przeglądaj"
description="Przejrzyj zawartość koszyka" />
<siteMapNode url="OproznijKoszyk.aspx"
title="Opróżnij koszyk"
description="Opróżnij zawartość koszyka" />
</siteMapNode>

background image

Piotr Bubacz

Moduł 11

ITA-103 Aplikacje Internetowe

Zarządzanie stanem w aplikacjach ASP.NET

Strona 11-9

Problem 3 (czas realizacji 25 min)

Wspólnie z zespołem jesteś zadowolony z wyglądu aplikacji. Teraz należy przygotowad logikę
obsługującą koszyk. Wspólnie przygotowaliście dwie klasy (Rys. 2), które będą odpowiedzialne za
obsługę koszyka. Dodatkowo musisz napisad logikę odpowiedzialną za zarządzanie koszykiem na
stronie Zakupy.aspx. Musisz odpowiednio umożliwid dodawanie, edycja i usuwanie produktów z
koszyka

Rys. 2 Diagram klas elementów koszyka

Zadanie

Tok postępowania

1. Dodaj klasę
ElementKoszyka

Kliknij prawym przyciskiem myszy folder App_code i wybierz Add New
Item
. Następnie z okna Template wybierz Class, w polu Name wpisz
ElementKoszyka.cs, a w liście rozwijanej Language wybierz Visual C#.

W pliku utwórz cztery właściwości Nazwa, ProdID, Cena i IloscSztuk:

public string Nazwa
{ get; set; }
public int ProdID
{ get; set; }
public decimal Cena
{ get; set; }
public int IloscSztuk
{ get; set; }

Do konstruktora domyślnego klasy ElementyKoszyka dodaj następujący
kod:

ProdID = 0;
Nazwa = "";
Cena = 0;
IloscSztuk = 0;

Dodaj konstruktor parametryzowany klasy przyjmujący parametry:
prodID, nazwa, cena i iloscSztuk.

public ElementKoszyka(int prodID, string nazwa, decimal cena, int
iloscSztuk)
{ ProdID = prodID;
Nazwa = nazwa;
Cena = cena;
IloscSztuk = iloscSztuk; }

Utwórz właściwośd Suma:

public decimal Suma
{ get { return Cena * IloscSztuk; } }

Zapisz zmiany w pliku.

background image

Piotr Bubacz

Moduł 11

ITA-103 Aplikacje Internetowe

Zarządzanie stanem w aplikacjach ASP.NET

Strona 11-10

2. Dodaj klasę
Koszyk

Kliknij prawym przyciskiem myszy folder App_code i wybierz Add New
Item
. Następnie z okna Template wybierz Class, w polu Name wpisz
Koszyk.cs, a w liście rozwijanej Language wybierz Visual C#.

W sekcji using dodaj:

using System.Collections.Generic;

Do klasy Koszyk dodaj pole prywatne _koszyk zawierające listę
obiektów klasy ElementKoszyka:

private List<ElementKoszyka> _koszyk;

Do konstruktora klasy Koszyk dodaj następujący kod:

_koszyk = new List<ElementKoszyka>();

Do metody dodaj właściwośd Ilosc zwracającą ilośd elementów w
koszyku:

public int Ilosc
{ get { return _koszyk.Count; } }

Do klasy dodaj metodę Pobierz zwracającą listę elementów koszyka:

public List<ElementKoszyka> Pobierz()
{ return _koszyk; }

Do klasy dodaj metodę AktualizujIlosc przyjmującą dwa parametry typu
int: indeks i iloscSztuk:

public void AktualizujIlosc(int indeks, int iloscSztuk)
{ ElementKoszyka element = _koszyk[indeks];
element.IloscSztuk = iloscSztuk; }

Do klasy dodaj metodę UsunElement przyjmującą jeden parametr –
indeks usuwanego element:

public void UsunElement(int indeks)
{ _koszyk.RemoveAt(indeks); }

Do klasy dodaj metodę Dodaj przyjmującą parametr prodID
identyfikator produktu, który należy dodad do koszyka. W metodzie
dodaj odpowiedni produkt:

public void Dodaj(int prodID)
{
bool znaleziono = false;
foreach (ElementKoszyka element in _koszyk)
{
if (element.ProdID == prodID)
{ element.IloscSztuk += 1;
znaleziono = true; }
}
if (!znaleziono)
{
AdventureWorksDataContext db = new AdventureWorksDataContext();
var produkt = (from p in db.Products
where p.ProductID == prodID
select p).FirstOrDefault();
if (produkt != null)
{
ElementKoszyka element = new ElementKoszyka(prodID,
produkt.Name, produkt.ListPrice, 1);
_koszyk.Add(element);
}
}
}

background image

Piotr Bubacz

Moduł 11

ITA-103 Aplikacje Internetowe

Zarządzanie stanem w aplikacjach ASP.NET

Strona 11-11

3. Dodaj obsługę
koszyka w pliku
Zakupy.aspx.cs

Otwórz plik Zakupy.aspx.cs. Do klasy Zakupy dodaj obiekt koszyka typu
Koszyk:

Koszyk koszyk;

W metodzie Page_Load utwórz nowy lub pobierz (jeśli istnieje) obiekt
koszyka przechowywany w stanie sesji:

koszyk = (Koszyk)Session["koszyk"];
if (koszyk == null)
{
koszyk = new Koszyk();
Session["koszyk"] = koszyk;
}

Następnie w tej samej metodzie dodaj do koszyka produkt, którego
ProdID został przekazany przez parametr wywołania strony. Wyświetl
koszyk w kontrolce GridView1:

if (!IsPostBack)
{
string req = Request.QueryString["prodID"];
if (req != null)
{
int prodID = int.Parse(Request.QueryString["prodID"]);
koszyk.Dodaj(prodID);
//usuwanie z adresu prodID
string url = Request.Url.AbsolutePath;
System.Web.HttpContext.Current.RewritePath(url, "", "");
}
}
KoszykGridView.DataSource = koszyk.Pobierz();
KoszykGridView.DataBind();
kasaButton.Enabled = (koszyk.Ilosc > 0);

W widoku Design wybierz kontrolkę KoszykGridView. W oknie
Properties kliknij Events, a następnie dwukrotnie kliknij RowDeleting.
W metodzie obsługi zdarzenia dodaj:

koszyk.UsunElement(e.RowIndex);
KoszykGridView.DataBind();

W widoku Design wybierz kontrolkę KoszykGridView. W oknie
Properties kliknij Events, a następnie dwukrotnie kliknij RowEditing. W
metodzie obsługi zdarzenia dodaj:

KoszykGridView.EditIndex = e.NewEditIndex;
KoszykGridView.DataBind();

W widoku Design wybierz kontrolkę KoszykGridView. W oknie
Properties kliknij Events, a następnie dwukrotnie kliknij RowUpdating.
W metodzie obsługi zdarzenia dodaj:

TextBox tb = (TextBox)
KoszykGridView.Rows[e.RowIndex].Controls[2].Controls[0];
try {
int wartosc = int.Parse(tb.Text);
if (wartosc<0) { wartosc =wartosc*(-1); }
koszyk.AktualizujIlosc(e.RowIndex, wartosc);}
catch { e.Cancel = true; }
KoszykGridView.EditIndex = -1;
KoszykGridView.DataBind();

W widoku Design wybierz kontrolkę KoszykGridView. W oknie
Properties

kliknij

Events,

a

następnie

dwukrotnie

kliknij

RowCancelingEdit. W metodzie obsługi zdarzenia dodaj:

background image

Piotr Bubacz

Moduł 11

ITA-103 Aplikacje Internetowe

Zarządzanie stanem w aplikacjach ASP.NET

Strona 11-12

e.Cancel = true;
KoszykGridView.EditIndex = -1;
KoszykGridView.DataBind();

Zapisz zamiany. Sprawdź możliwośd dodawania, edycji i usuwania
produktów z koszyka.

4. Dodaj stronę
do usuwania
koszyka

Dodaj

plik

OproznijKoszyk.aspx

oparty

na

szablonie

SzablonStrony.master.

Do pliku OproznijKoszyk.aspx.cs dodaj:

Session["koszyk"] = null;
Response.Redirect("~/Default.aspx");

5. Przetestuj
dodawanie
produktów do
koszyka

Dodaj produkty do koszyka. Zmieo ilośd produktów wpisując wartośd
ujemną oraz wpisując tekst zamiast liczby.


Wyszukiwarka

Podobne podstrony:
ITA 103 Modul13
ITA 103 Modul12
ITA 103 Modul10
ITA 103 Modul14
ITA 103 Modul04
ITA 103 Modul02
ITA 103 Modul03
ITA 103 Modul05
ITA 103 Modul08
ITA 103 Modul06
ITA 103 Modul01
ITA 103 Modul09

więcej podobnych podstron