Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
00335 006735 12443765 na godz. na dobę w sumie
C#. Programowanie. Wydanie VI - książka
C#. Programowanie. Wydanie VI - książka
Autor: , , Liczba stron: 840
Wydawca: Helion Język publikacji: polski
ISBN: 978-83-246-3701-0 Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> programowanie >> c# - programowanie
Porównaj ceny (książka, ebook, audiobook).

Najlepszy podręcznik poświęcony C#!

W dzisiejszych czasach szczególną popularnością cieszą się języki programowania pozwalające na pisanie kodu łatwego do przenoszenia między platformami, ponieważ nikt nie ma czasu na pisanie kilku wersji jednej aplikacji. C# to uniwersalny język, który bez trudu spełnia ten wymóg. Dzięki swej elastyczności, wydajności oraz mocnemu wsparciu społeczności zdobył on uznanie programistów. Jego wybór to strzał w dziesiątkę!

Ten bestsellerowy podręcznik pozwoli Ci błyskawicznie poznać wszystkie niuanse języka C# 4.0. Najnowsze wydanie zostało zaktualizowane o nowości w C# oraz zawiera opis tego języka i platformy .NET. W trakcie lektury nauczysz się tworzyć skomplikowane programy przy użyciu technik programowania obiektowego i funkcjonalnego. Ponadto sprawdzisz, jaki potencjał kryje język zapytań LINQ oraz jak przesyłać komunikaty za pomocą Windows Communication Foundation (WCF). Dodatkowo poznasz możliwości C# w zakresie tworzenia aplikacji internetowych w technologii Silverlight. Nauka C# jeszcze nigdy nie była tak przyjemna!

Wykorzystaj potencjał języka C#!


Ian Griffiths jest autorem kursu WPF oraz instruktorem w firmie Pluralsight, specjalizującej się w prowadzeniu kursów Microsoft .NET. Pracuje także jako niezależny konsultant. Jest współautorem książek 'Windows Forms in a Nutshell', 'Mastering Visual Studio .NET' oraz 'Programming WPF', wydanych przez wydawnictwo O'Reilly.

Matthew Adams jest kierownikiem do spraw tworzenia aplikacji w firmie Digital Healthcare Ltd. oraz autorem wielu artykułów i publikacji dotyczących znaczenia .NET w przemyśle informatycznym.

Jesse Liberty jest starszym kierownikiem programu Microsoft Silverlight. Jest doskonale znany w środowisku jako jeden z czołowych ekspertów oraz autor bestsellerowych książek, takich jak 'Programming C# 3.0' (O'Reilly) oraz 'ASP.NET 3.5. Programowanie' i 'ASP.NET 2.0 i Ajax'.


Znajdź podobne książki Ostatnio czytane w tej kategorii

Darmowy fragment publikacji:

• Kup książkę • Poleć książkę • Oceń książkę • Księgarnia internetowa • Lubię to! » Nasza społeczność Spis treļci Wstýp ...................................................................................................................................... 13 Dlaczego C#? Dlaczego .NET? Biblioteka klas platformy .NET Styl jözyka 1. Prezentacja C# ............................................................................................................. 19 19 20 21 22 23 24 25 27 ãatwoĈè konstruowania oprogramowania Kod zarzñdzany CiñgäoĈè i „ekosystem” Windows C# 4.0, .NET 4.0 oraz Visual Studio 2010 Podsumowanie Zmienne Typy zmiennych WyraĔenia i instrukcje Nieprawidäowe komentarze Komentarze dokumentujñce XML Poczñtki Przestrzenie nazw i typy Projekty i solucje Komentarze, regiony oraz czytelnoĈè 2. Podstawowe techniki programowania ......................................................................29 29 32 37 42 43 44 45 46 52 55 55 56 58 62 64 65 67 69 70 Instrukcje przypisania Operatory inkrementacji i dekrementacji Instrukcje sterowania przepäywem i wyboru Instrukcje foreach Instrukcje for Instrukcje while oraz do Przerywanie wykonywania pötli Instrukcje if Instrukcje switch oraz case Instrukcje iteracji 3 Metody Podsumowanie 71 74 Dziel i rzñdĒ Definiowanie klas Wyodröbnianie idei w formie metod Wyodröbnianie idei przy uĔyciu obiektów i klas Reprezentowanie stanu przy uĔyciu wäaĈciwoĈci Poziomy ochrony Inicjalizacja przy uĔyciu konstruktora Pola: miejsca do zapisywania danych Pola mogñ siö zmieniaè, lecz staäe nie Pola i wäaĈciwoĈci tylko do odczytu 3. Wyodrýbnianie idei przy wykorzystaniu klas i struktur ............................................ 77 77 77 80 81 82 84 86 90 92 93 96 100 105 105 106 108 112 115 116 117 119 Typ enum — powiñzane ze sobñ staäe Typy wartoĈciowe i referencyjne Zbyt wiele konstruktorów, Panie Mozart PrzeciñĔanie Metody przeciñĔone oraz domyĈlne parametry nazwane Inicjalizatory obiektów Definiowanie metod Deklarowanie metod statycznych Pola i wäaĈciwoĈci statyczne Konstruktory statyczne Podsumowanie Ukrywanie skäadowych klasy bazowej przy uĔyciu new Zastöpowanie metod przy uĔyciu modyfikatorów virtual i override Tworzenie asocjacji poprzez kompozycjö i agregacjö Dziedziczenie i polimorfizm Zastöpowanie metod w klasach pochodnych Dziedziczenie i ochrona Wywoäywanie metod klasy bazowej Dotñd i ani kroku dalej: modyfikator sealed Wymuszanie przesäaniania — metody abstrakcyjne Wszystkie typy dziedziczñ po klasie Object 4. Rozszerzalnoļë i polimorfizm ....................................................................................121 122 124 126 127 129 132 134 136 138 144 144 149 149 152 153 157 158 C# nie obsäuguje wielokrotnego dziedziczenia implementacji C# obsäuguje wielokrotne dziedziczenie interfejsów Tworzenie jednych interfejsów na bazie innych Ostateczne rozwiñzanie: sprawdzanie typów podczas wykonywania programu Podsumowanie Pakowanie i rozpakowywanie typów wartoĈciowych Jawna implementacja interfejsów 4 _ Spis treļci Kompozycja funkcyjna wykorzystujñca delegacje Typ Action T — akcje ogólne Predicate T — predykaty ogólne Stosowanie metod anonimowych Tworzenie delegacji przy uĔyciu wyraĔeþ lambda Delegacje we wäaĈciwoĈciach Ogólne delegacje do funkcji Informowanie klientów za pomocñ zdarzeþ 5. Delegacje — ĥatwoļë komponowania i rozszerzalnoļë .......................................... 159 166 172 175 177 178 180 182 186 194 197 Udostöpnianie duĔej liczby zdarzeþ Podsumowanie Debugowanie wartoĈci zwracanych Kiedy i jak uznaè niepowodzenie Zwracanie kodu bäödu 6. Obsĥuga bĥýdów ........................................................................................................ 199 204 207 213 214 219 226 227 230 232 Obsäuga wyjñtków Kiedy sñ wykonywane bloki finally? OkreĈlanie, jakie wyjñtki bödñ przechwytywane Wyjñtki niestandardowe Podsumowanie Wyjñtki Tablice List T Tworzenie i inicjalizacja Wäasne typy w tablicach Skäadowe tablic WielkoĈè tablic 7. Tablice i listy ..............................................................................................................233 233 234 237 242 247 254 257 264 264 268 274 Niestandardowe indeksatory Wyszukiwanie i sortowanie Tworzenie wäasnych implementacji IEnumerable T Kolekcje i polimorfizm Podsumowanie WyraĔenia zapytaþ WyraĔenia zapytaþ a wywoäania metod Metody rozszerzeþ a LINQ Klauzule let 8. LINQ ............................................................................................................................275 275 277 278 280 281 281 283 284 Delegacje i wyraĔenia lambda Styl funkcyjny i kompozycja Wykonywanie opóĒnione Koncepcje i techniki LINQ Spis treļci _ 5 Operatory LINQ Filtrowanie Porzñdkowanie Konkatenacja Grupowanie Projekcje Spinanie Robimy siö wybredni Testowanie caäej kolekcji Agregacja Operacje na zbiorach ãñczenie Konwersje Podsumowanie 285 285 286 289 289 291 298 299 300 302 304 304 305 306 Säowniki Popularne zastosowania säowników IDictionary TKey, TValue Säowniki i LINQ 9. Klasy kolekcji ..............................................................................................................307 307 309 315 317 318 319 320 321 322 HashSet oraz SortedSet Kolejki Listy poäñczone Stosy Podsumowanie Oznaczanie znaków specjalnych Formatowanie wyĈwietlanych danych Czym sñ äaþcuchy znaków? Typy String i Char Literaäy äaþcuchowe i znakowe Standardowe äaþcuchy formatowania liczb Niestandardowe äaþcuchy formatujñce Daty i godziny W drugñ stronö — konwersja äaþcuchów na dane innych typów ZäoĔone formatowanie przy uĔyciu metody String.Format 10. Ĥaħcuchy znaków ......................................................................................................323 324 325 326 327 330 331 337 340 343 345 346 348 349 349 351 352 354 355 Uzyskiwanie dostöpu do znaków na podstawie indeksów ãaþcuchy znaków sñ niezmienne Pobieranie ciñgu znaków Skäadanie äaþcuchów znaków WraĔliwoĈè na ustawienia kulturowe Poznawanie reguä formatowania Ponowne dzielenie äaþcuchów Wielkie i maäe litery 6 _ Spis treļci Operacje na tekĈcie StringBuilder — modyfikowalne äaþcuchy znaków Odnajdywanie i zastöpowanie äaþcuchów Wszelkiego typu „puste” äaþcuchy znaków Usuwanie biaäych znaków Sprawdzanie typu znaków Kodowanie znaków Dlaczego kodowanie ma znaczenie Kodowanie i dekodowanie Po co reprezentowaè äaþcuchy w formie sekwencji bajtów? Podsumowanie 356 357 361 362 365 368 368 370 371 378 378 ćcieĔka i aktualny katalog roboczy Sprawdzanie katalogów i plików Badanie katalogów Operacje na ĈcieĔkach Zapis caäego pliku tekstowego w jednym wywoäaniu Zapis tekstu przy uĔyciu klasy StreamWriter Gdy pliki schodzñ na zäñ drogö: obsäuga wyjñtków Zdobywanie informacji o pliku Tworzenie plików tymczasowych Usuwanie plików Powszechnie znane katalogi Bezpieczne äñczenie elementów ĈcieĔek Tworzenie i zabezpieczanie hierarchii katalogów Usuwanie katalogu Zapis plików tekstowych 11. Pliki i strumienie ........................................................................................................379 379 382 383 384 385 388 389 390 393 394 401 402 402 403 406 410 414 418 424 425 426 428 428 429 429 430 433 434 435 436 Bufory strumieni OkreĈlanie uprawnieþ podczas tworzenia strumieni Opcje zaawansowane Asynchroniczne operacje na plikach Mechanizm Isolated Storage OkreĈlanie i modyfikacja uprawnieþ Wczytywanie plików do pamiöci Strumienie Poruszanie siö wewnñtrz strumienia Zapis danych przy uĔyciu strumieni Odczyt, zapis i blokowanie plików Konstruktory klasy FileStream Magazyny Zapis i odczyt tekstu Definicja izolowania Spis treļci _ 7 Strumienie, które nie sñ plikami Zarzñdzanie magazynami uĔytkownika przy uĔyciu limitów Zarzñdzanie magazynami 440 441 444 447 Strumieþ adaptujñcy — CryptoStream Wszystko w pamiöci — MemoryStream 448 Reprezentowanie danych binarnych jako tekstu przy uĔyciu kodowania Base64 449 452 Podsumowanie Elementy XHTML Podstawy XML (krótki przeglñd) Litera „X” oznacza „rozszerzalny” (eXtensible) Tworzenie dokumentów XML 12. XML ............................................................................................................................453 453 453 455 456 456 459 460 463 464 467 468 469 469 472 473 Elementy XML Atrybuty XML Umieszczanie kodu LINQ w LINQ to XML Wyszukiwanie pojedynczego wözäa Osie wyszukiwania Klauzule where Dostosowywanie serializacji XML za pomocñ atrybutów Przeszukiwanie kodu XML za pomocñ LINQ Serializacja XML Podsumowanie Platforma WCF Wybór technologii sieciowej Aplikacja WWW z kodem klienta Klient .NET i serwer .NET Klient .NET i usäuga WWW pochodzñca z zewnñtrz Klient zewnötrzny i usäuga WWW .NET 13. Sieci ............................................................................................................................475 475 476 480 482 483 483 483 484 486 489 496 504 513 514 518 525 526 531 535 Tworzenie projektu WCF Kontrakty WCF Testowy host i klient WCF Udostöpnianie usäugi WCF Pisanie klienta WCF Dwukierunkowa komunikacja z dwustronnymi kontraktami Protokoäy IP, IPv6 oraz TCP ãñczenie siö z usäugami za pomocñ klasy Socket Implementowanie usäug za pomocñ klasy Socket Klient WWW Klasy WebRequest i WebResponse Protokóä HTTP Gniazda 8 _ Spis treļci Inne moĔliwoĈci zwiñzane z sieciñ Podsumowanie 540 540 Model encji danych Krajobraz moĔliwoĈci dostöpu do danych w ramach platformy .NET Wygenerowany kod Zmiana odwzorowywania Zwiñzki Dziedziczenie Klasyczny mechanizm ADO.NET LINQ i bazy danych Technologie dostöpu do danych nieopracowane przez firmö Microsoft WCF Data Services Technologia Silverlight i dostöp do danych Bazy danych 14. Bazy danych ............................................................................................................... 541 541 542 546 548 548 549 550 551 555 557 558 565 566 566 570 573 574 574 574 577 579 584 586 587 591 Obsäuga poäñczenia Tworzenie, aktualizowanie i usuwanie Transakcje Optymistyczna wspóäbieĔnoĈè Czas Ĕycia kontekstu i encji LINQ to Entities Entity SQL Mieszanie jözyków ESQL oraz LINQ Dostawca ADO.NET EntityClient WCF Data Services Podsumowanie Zapytania Kontekst obiektu Nazwy Komponenty .NET — podzespoäy Odwoäania Pisanie bibliotek Ochrona 15. Podzespoĥy .................................................................................................................593 593 594 597 599 602 603 605 606 606 607 607 609 ãadowanie z folderu aplikacji ãadowanie z bufora GAC ãadowanie z pliku Silverlight o rozszerzeniu xap Jawne äadowanie Podpisywanie i silne nazwy Podsumowanie ãadowanie Spis treļci _ 9 Wñtki Podstawowe narzödzia synchronizacji Monitor Inne typy blokad Inne mechanizmy synchronizacji Zdarzenia Odliczanie Wñtki i systemowy mechanizm szeregujñcy Stos Pula wñtków Powinowactwo oraz kontekst wñtków Popularne bäödne opinie dotyczñce wñtków Tworzenie kodu wielowñtkowego jest trudne Strategie tworzenia kodu wielowñtkowego 16. Wétki i kod asynchroniczny .......................................................................................611 613 615 617 624 625 627 634 637 638 639 649 653 653 654 655 656 659 660 661 661 668 669 671 671 673 674 Model programowania asynchronicznego Programowanie asynchroniczne bazujñce na zdarzeniach DoraĒne operacje asynchroniczne Metody Parallel.For oraz Parallel.ForEach PLINQ — równolegäe LINQ Zadania Obsäuga anulowania Obsäuga bäödów Programowanie asynchroniczne RównolegäoĈè danych Task Parallel Library Podsumowanie Atrybuty Typy atrybutów Wäasne atrybuty 17. Atrybuty i odzwierciedlanie .....................................................................................675 675 676 677 681 681 683 684 686 689 Badanie metadanych Odkrywanie typów Odzwierciedlanie na rzecz okreĈlonego typu PóĒne wiñzanie Odzwierciedlanie Podsumowanie Styl statyczny kontra styl dynamiczny Styl dynamiczny i automatyzacja COM 18. Typ dynamic ............................................................................................................... 691 691 693 694 697 707 710 Typ dynamic w zastosowaniach niezwiñzanych z interoperacyjnoĈciñ? Podsumowanie Typy obiektów i säowo dynamic Typ dynamic 10 _ Spis treļci Bez PIA Podzespoäy wspóädziaäania Importowanie kontrolek ActiveX Importowanie kontrolek do projektów .NET 19. Wspóĥdziaĥanie z COM i Win32 .................................................................................711 711 712 714 716 717 720 724 729 729 730 731 64 czy 32 bity? Mechanizm P/Invoke WskaĒniki Rozszerzenia skäadni C# 4.0 WäaĈciwoĈci indeksowane Opcjonalny modyfikator ref Podsumowanie XAML i kod ukryty XAML i obiekty Elementy i kontrolki Panele ukäadów Elementy graficzne Kontrolki Kontrolki uĔytkownika 20. WPF i Silverlight .........................................................................................................733 735 739 742 743 752 759 763 765 767 769 771 773 776 Style MenedĔer stanu wizualnego Szablony kontrolek Wiñzanie danych Szablony danych Podsumowanie Podstawy technologii Web Forms Tworzenie aplikacji internetowych Zdarzenia formularzy sieciowych Cykl Ĕycia stron w technologii Web Forms 21. Tworzenie aplikacji w ASP.NET ................................................................................ 777 777 779 780 781 782 783 785 786 789 792 796 Sprawdzanie kodu Dodawanie kontrolek i formularzy Pliki kodu ukrytego Dodawanie kontrolek Kontrolki serwerowe Wiñzanie danych Podsumowanie 22. Windows Forms ......................................................................................................... 797 798 799 Dodawanie Ēródäa wiñzania Tworzenie aplikacji Spis treļci _ 11 Kontrolki Dokowanie i kotwiczenie Wiñzanie danych Obsäuga zdarzeþ Podsumowanie 801 806 808 813 814 Skorowidz ............................................................................................................................. 817 12 _ Spis treļci ROZDZIAĤ 21. Tworzenie aplikacji w ASP.NET ProgramiĈci coraz wiöcej swoich aplikacji piszñ w taki sposób, by mogäy one dziaäaè w inter- necie, a korzystanie z nich odbywaäo siö za poĈrednictwem przeglñdarek WWW. Jak dowiedzie- liĈmy siö w rozdziale 20., technologia Silverlight pozwala pisaè kod C#, który bödzie wyko- nywany w przeglñdarce WWW po stronie klienta. JeĈli natomiast chodzi o obsäugö aplikacji internetowych po stronie serwera, to .NET Framework udostöpnia technologiö ASP.NET. W tym rozdziale skoncentrujemy siö na przedstawieniu punktu, w którym spotykajñ siö ASP.NET oraz jözyk C# — technologii Web Forms. ASP.NET jest zagadnieniem bardzo obszer- nym i jeĈli Czytelnik chciaäby znaleĒè jego obszernñ i wyczerpujñcñ prezentacjö, radzimy siö- gnñè po ksiñĔkö Programming ASP.NET 3.5, Fourth Edition napisanñ przez Jessego Liberty, Dana Maharry’ego i Dana Hurwitza lub Learning ASP.NET 3.5, Second Edition napisanñ przez Jessego Liberty, Dana Hurwitza i Dana MacDonalda (obie zostaäy wydane przez wydawnictwo O’Reilly). Podstawy technologii Web Forms Technologia Web Forms przenosi ideö szybkiego programowania aplikacji (RAD — Rapid Application Development) do Ĉwiata programowania aplikacji internetowych. Z poziomu Visual Studio lub programu Visual Web Developer, korzystajñc z techniki „przeciñgnij i upuĈè”, moĔna umieszczaè elementy sterujñce na formularzach i pisaè specjalny „kod ukryty” (ang. code-behind) wspomagajñcy ich dziaäanie. Aplikacje tego typu sñ zazwyczaj wdraĔane na ser- werze WWW (przewaĔnie jest to serwer IIS, dostöpny niemal we wszystkich wersjach systemu Windows, lub Cassini, wbudowany w Visual Studio w celu testowania pisanych aplikacji), a uĔytkownicy prowadzñ z nimi interakcjö, korzystajñc z przeglñdarek WWW. Technologia ASP.NET obsäuguje takĔe inne modele niĔ Web Forms — moĔna na przykäad operowaè bezpoĈrednio na poziomie Ĕñdaþ HTTP. Co wiöcej, platforma .NET 4 udostöpnia nowy model MVC (skrót od angielskich säów model, view, control- ler — model, widok, kontroler). Model ten jest znacznie bardziej skomplikowany, lecz jednoczeĈnie zapewnia znacznie wiöksze moĔliwoĈci oraz elastycznoĈè, przez co sta- nowi doskonaäe rozwiñzanie w przypadku tworzenia zäoĔonych aplikacji interneto- wych. Jako Ĕe niniejsza ksiñĔka nie jest poĈwiöcona wyäñcznie technologii ASP.NET, przedstawimy tu wyäñcznie proste przykäady aplikacji tworzonych przy uĔyciu tech- nologii Web Forms. 777 Technologia Web Forms udostöpnia model, w którym strony WWW sñ generowane dyna- micznie na serwerze i dostarczane do przeglñdarki za poĈrednictwem internetu. Zapewnia ona moĔliwoĈè tworzenia stron ASPX zawierajñcych kod HTML oraz kontrolki sieciowe (ang. web controls), a takĔe pisania kodu C# implementujñcego reakcje na czynnoĈci wykonywane przez uĔytkownika na stronie i dodajñcego do niej dynamiczne treĈci. Kod C# jest wykonywany na serwerze, a dane przez niego wytworzone sñ integrowane z kontrolkami umieszczonymi na stronie i wspólnie generujñ kod HTML, który nastöpnie zostaje przesäany do przeglñdarki uĔytkownika. Koniecznie naleĔy zwróciè uwagö na trzy kluczowe informacje podane w poprzednim akapicie i pamiötaè o nich podczas lektury tego rozdziaäu: x Strony WWW mogñ zawieraè zarówno kod HTML, jak i kontrolki sieciowe (opisane w dal- szej czöĈci rozdziaäu). x W technologii ASP.NET kod jest wykonywany na serwerze w Ĉrodowisku zarzñdzanym. (OczywiĈcie technologii tej moĔna uĔywaè w poäñczeniu z technologiñ AJAX bñdĒ Silverlight, jeĈli chcemy takĔe skorzystaè z kodu dziaäajñcego po stronie klienta). x Kontrolki ASP.NET generujñ standardowy kod HTML wyĈwietlany w przeglñdarce. W przypadku formularzy sieciowych tworzonych w technologii Web Forms interfejs uĔytkow- nika jest dzielony na dwa elementy: czöĈè wizualnñ (nazywanñ takĔe interfejsem uĔytkownika — UI) oraz logikö jej obsäugi. Rozwiñzanie to okreĈlane jest jako separacja kodu (ang. code separation) i jest czymĈ bardzo poĔytecznym. Interfejs uĔytkownika stron ASP.NET jest umieszczany w plikach z rozszerzeniem aspx. W przypadku Ĕñdania wykonania formularza serwer generuje kod HTML, a nastöpnie przesyäa go do przeglñdarki uĔytkownika. W kodzie stron ASP.NET umieszczane sñ specjalne kon- trolki Web Forms zdefiniowane w przestrzeniach nazw System.Web oraz System.Web.UI biblioteki klas .NET. Pisanie stron korzystajñcych z Web Forms przy uĔyciu Visual Studio nie mogäo byè prostsze. Wystarczy, Ĕe otworzymy formularz, przeciñgniemy na niego kilka kontrolek i napiszemy kod, który bödzie je obsäugiwaä. I gotowe! WäaĈnie napisaliĈmy aplikacjö internetowñ. Z drugiej strony, nawet w przypadku korzystania z Visual Studio napisanie solidnej i kom- pletnej aplikacji internetowej moĔe byè onieĈmielajñcym zadaniem. Technologia Web Forms udostöpnia niezwykle bogaty interfejs uĔytkownika — liczba i stopieþ zäoĔonoĈci oferowanych przez niñ kontrolek znaczñco wzrosäy w ciñgu kilku ostatnich lat, podobnie zresztñ jak oczeki- wania uĔytkowników odnoĈnie do ich wyglñdu i sposobu dziaäania. Co wiöcej, aplikacje internetowe sñ z zaäoĔenia aplikacjami rozproszonymi. Zazwyczaj klient takich aplikacji nie znajduje siö w tym samym budynku co serwer. W przypadku wiökszoĈci z nich podczas tworzenia interfejsu uĔytkownika naleĔy uwzglödniaè czasy opóĒnieþ trans- misji sieciowych, przepustowoĈè oraz wydajnoĈè serwera, gdyĔ caäkowity czas obsäugi Ĕñdania moĔe wynieĈè nawet kilka sekund. Aby uproĈciè opisywane tu zagadnienia i umoĔliwiè skoncentrowanie siö na aspektach zwiñzanych z jözykiem C#, caäkowicie pominiemy tu sprawy dotyczñce przetwarzania wykonywanego po stronie klienta i zajmiemy siö wyäñcznie kontrolkami ASP.NET obsäugiwanymi po stronie serwera. 778 _ Rozdziaĥ 21. Tworzenie aplikacji w ASP.NET Zdarzenia formularzy sieciowych Formularze sieciowe sñ sterowane zdarzeniami. Zdarzenie reprezentuje „coĈ, co siö zdarzyäo” (wiöcej informacji na ten temat moĔna znaleĒè w rozdziale 5.). Zdarzenie zostaje zgäoszone, gdy uĔytkownik kliknie przycisk, wybierze opcjö z listy bñdĒ wejdzie w jakñkolwiek innñ interakcjö z interfejsem uĔytkownika. OczywiĈcie w przypadku aplikacji internetowych interakcje te majñ miejsce w przeglñdarce WWW dziaäajñcej na kompu- terze uĔytkownika, niemniej jednak zdarzenia ASP.NET sñ obsäugiwane na serwerze. Aby takie rozwiñzanie mogäo dziaäaè, konieczne jest wykonanie peänego cyklu komunikacji z serwerem. Przeglñdarka musi przesäaè do serwera Ĕñdanie, a ten z kolei musi na nie odpowiedzieè — dopiero wtedy zdarzenie zostanie caäkowicie obsäuĔone. To moĔe jednak trochö potrwaè, wiöc w porównaniu z obsäugñ zdarzeþ w klasycznych aplikacjach dla systemu Windows jeste- Ĉmy nieco ograniczeni — choè obsäugiwanie po stronie serwera niektórych zdarzeþ takich jak przesuwanie wskaĒnika myszy po ekranie po prostu byäoby praktyczne, to jednak ASP.NET udostöpnia jedynie ograniczonñ liczbö zdarzeþ, na przykäad klikniöcie przycisku lub zmianö zawartoĈci pola tekstowego. Sñ to zdarzenia, które mogñ skutkowaè powaĔnymi zmianami i których obsäuga moĔe byè warta wysäania Ĕñdania na serwer. Zdarzenia przesyĥane i nieprzesyĥane Zdarzenia przesyäane (ang. postback events) to takie, których zgäoszenie powoduje natychmia- stowe przesäanie formularza na serwer. Zaliczajñ siö do nich na przykäad zdarzenia zwiñzane z obsäugñ klikniöè takie jak zdarzenie Click przycisków. Istnieje takĔe liczna grupa zdarzeþ nieprzesyäanych, czyli takich, których zgäoszenie nie powoduje natychmiastowego przesäania for- mularza na serwer. MoĔna zmusiè kontrolki generujñce zdarzenia nieprzesyäane, by ich zdarzenia powo- dowaäy przesäanie formularza. W tym celu wystarczy przypisaè wäaĈciwoĈci AutoPost ´Back wartoĈè true. Zdarzenia nieprzesyäane sñ zgäaszane w momencie, gdy ASP.NET odkryje, Ĕe naleĔy je zgäosiè, co moĔe jednak nastñpiè ze znacznym opóĒnieniem wzglödem momentu, w którym uĔytkownik wykonaä czynnoĈè prowadzñcñ do ich wygenerowania. Na przykäad kontrolka TextBox udostöpnia zdarzenie TextChanged. Raczej nie bödziemy oczekiwaè, Ĕe formularz zostanie automatycznie prze- säany na serwer w momencie, gdy uĔytkownik zacznie coĈ wpisywaè w polu tekstowym, dla- tego teĔ nie jest to zdarzenie przesyäane. JeĈli uĔytkownik wypeäni kilka pól formularza, serwer nie bödzie o tym nic wiedziaä — ta zmiana stanu nastöpuje po stronie klienta. ASP.NET odkryje jñ dopiero wtedy, gdy uĔytkownik kliknie przycisk, by przesäaè formularz na serwer. Dopiero wówczas zostanñ zgäoszone zdarzenia TextChanged dla wszystkich wypeänionych pól tekstowych. Oznacza to, Ĕe w ramach obsäugi jednego Ĕñdania moĔe zostaè obsäuĔonych wiele róĔnych zdarzeþ. Stan widoku UĔytkownicy oczekujñ, Ĕe kontrolki tworzñce interfejs uĔytkownika aplikacji bödñ pamiötaäy swój stan — znikniöcie wartoĈci wpisanej w polu tekstowym lub opcji zaznaczonej na liĈcie moĔe byè bardzo mylñce. Niestety WWW jest z natury Ĉrodowiskiem „bezstanowym”1. 1 Choè jest to uzasadnione przez architekturö sieci, nie wpäywa to dobrze na äatwoĈè korzystania z niej. Podstawy technologii Web Forms _ 779 Oznacza to, Ĕe kaĔde przesäanie Ĕñdania na serwer powoduje utratö stanu z poprzedniego Ĕñda- nia, chyba Ĕe programista wäoĔy wiele pracy i staraþ, by zachowaè posiadanñ wiedzö o sesji. WWW obejmuje caäe mnóstwo witryn zawierajñcych formularze, których zawartoĈè jest caäko- wicie tracona w przypadku, gdy przesäane na serwer dane zawierajñ jakikolwiek bäñd. Progra- miĈci muszñ wykonaè caäkiem sporo pracy, by zapobiec takim sytuacjom. Jednak ASP.NET udostöpnia mechanizmy pozwalajñce na automatycznñ obsäugö pewnych aspektów stanu. Za kaĔdym razem, gdy formularz zostaje przesäany na serwer, ten przed odesäaniem odpowie- dzi do przeglñdarki go odtwarza. ASP.NET oferuje mechanizm, który automatycznie zacho- wuje stan kontrolek obsäugiwanych po stronie serwera (ViewState). A zatem jeĈli formularz zawiera listö, a uĔytkownik wybraä jednñ z dostöpnych na niej opcji, to opcja ta pozostanie zaznaczona takĔe po przesäaniu formularza na serwer i ponownym wyĈwietleniu go w prze- glñdarce. Cykl Ŝycia stron w technologii Web Forms KaĔde Ĕñdanie dotyczñce strony docierajñce na serwer powoduje wygenerowanie na nim ciñgu zdarzeþ. Zdarzenia te skäadajñ siö na caäkowity cykl Ĕycia strony oraz wszystkich jej komponen- tów. Cykl ten zaczyna siö od Ĕñdania zwrócenia strony, które sprawia, Ĕe serwer jñ wczytuje. Obsäuga Ĕñdania koþczy siö natomiast usuniöciem strony z pamiöci serwera. Ostatecznym celem obsäugi Ĕñdania jest wygenerowanie i przesäanie do przeglñdarki wynikowego kodu HTML. Jako Ĕe ASP.NET jest technologiñ serwerowñ, dla niej cykl Ĕycia strony wyglñda zupeä- nie inaczej niĔ z punktu widzenia uĔytkownika. W chwili gdy uĔytkownik zobaczy stronö, serwer juĔ dawno skoþczyä jñ obsäugiwaè. Kiedy kod HTML dotrze do przeglñ- darki, równie dobrze moĔna by wyäñczyè serwer i odäñczyè go od internetu, a uĔyt- kownik w ogóle by tego nie zauwaĔyä aĔ do momentu przesäania kolejnego Ĕñdania. Cykl Ĕycia strony jest wyznaczany poniĔszymi zdarzeniami. Na kaĔdym z etapów jej prze- twarzania ASP.NET wykonuje konkretne operacje, jednak z kaĔdym z tych zdarzeþ moĔna skojarzyè procedurö obsäugi, by wykonaè w niej jakieĈ dodatkowe czynnoĈci. Inicjalizacja Inicjalizacja jest pierwszym etapem cyklu Ĕycia strony lub kontrolki. To wäaĈnie podczas niej sñ inicjowane wszelkie ustawienia, które bödñ potrzebne podczas obsäugi Ĕñdania. Wczytanie ViewState Na tym etapie zostaje okreĈlona wartoĈè wäaĈciwoĈci ViewState. WartoĈè ta jest przecho- wywana w ukrytym polu formularza HTML. Kiedy ASP.NET po raz pierwszy generuje kod strony, umieszcza w nim to ukryte pole, a nastöpnie korzysta z niego, by zachowaè stan strony pomiödzy kolejnymi Ĕñdaniami przesyäanymi na serwer. Ciñg znaków zapisany w tym polu jest przetwarzany przez platformö i na jego podstawie okreĈlana jest wartoĈè wäaĈciwoĈci ViewState. Zapewnia to moĔliwoĈè zarzñdzania stanem poszczególnych kon- trolek pomiödzy kolejnymi wyĈwietleniami strony, dziöki czemu ich zawartoĈè nie jest za kaĔdym razem przywracana do wartoĈci domyĈlnej. Przetworzenie danych zwrotnych Podczas tego etapu zostajñ przetworzone dane przesäane na serwer — tak zwane dane zwrotne (ang. postback data). 780 _ Rozdziaĥ 21. Tworzenie aplikacji w ASP.NET Wczytanie Na tym etapie nastöpuje wywoäanie metody CreateChildControls, które powoduje utwo- rzenie i zainicjowanie kontrolek serwerowych w drzewie sterowania. Stan formularzy zostaje odtworzony, a ich kontrolki zawierajñ dane przesäane z przeglñdarki w Ĕñdaniu. Wysäanie modyfikacji danych zwrotnych JeĈli pojawiäy siö jakiekolwiek róĔnice pomiödzy poprzednim i bieĔñcym stanem, to zostaje wywoäana metoda RaisePostDataChangedEvent, która powoduje zgäoszenie odpowiednich zdarzeþ. Obsäuga zdarzeþ Na tym etapie zostaje obsäuĔone zdarzenie (zgäoszone po stronie klienta), które spowodo- waäo przesäanie Ĕñdania na serwer. Generowanie wstöpne To ostatni moment, by zmieniè wäaĈciwoĈci kontrolek, nim zostanñ one wygenerowane. (W przypadku formularzy sieciowych „wygenerowanie” oznacza utworzenie odpowied- niego kodu HTML, który zostanie nastöpnie przesäany do przeglñdarki). Zapisanie stanu Na poczñtku cyklu Ĕycia strony jej zachowany stan zostaä odczytany i odtworzony z ukry- tego pola formularza. Na tym etapie jest on ponownie zapisywany w polu jako äaþcuch znaków, co koþczy peäny cykl przesyäania stanu pomiödzy klientem i serwerem. Generowanie Podczas tego etapu jest generowany kod wynikowy, który zostanie przesäany do prze- glñdarki. Zwolnienie To ostatni etap cyklu Ĕycia strony. Zapewnia on programiĈcie moĔliwoĈè wykonania ostatecznych porzñdków i zwolnienia referencji do wszelkich kosztownych zasobów takich jak poäñczenia z bazami danych. Tworzenie aplikacji internetowych Visual Studio udostöpnia dwa sposoby tworzenia aplikacji internetowych. Nie jest to jedynie kwestia wyboru jednego z dwóch przycisków w menu zapewniajñcych dostöp do tej samej moĔliwoĈci — obie opcje dziaäajñ caäkowicie odmiennie, a Visual Studio nie oferuje wystarcza- jñcych informacji o róĔnicach pomiödzy nimi w momencie, gdy trzeba dokonaè wyboru. Jednym z tych dwóch sposobów jest skorzystanie z opcji New Project, która udostöpnia róĔne szablony projektów ASP.NET umieszczone w sekcji Visual C#/Web, pozwalajñce na generowanie róĔ- nych rodzajów projektów aplikacji internetowych. Sñ to peänoprawne projekty aplikacji Visual Studio generowane i budowane dokäadnie tak samo jak wszelkie inne projekty (biblioteki, aplikacje konsolowe czy teĔ aplikacje WPF). Projekty tego typu sñ nieco „lĔejsze” — nie ma w nich pliku .csproj reprezentujñcego projekt. Nie istnieje teĔ koniecznoĈè ich budowania, gdyĔ taki projekt skäada siö wyäñcznie z plików Ēródäowych i to one póĒniej bödñ kopiowane na serwer WWW. W przykäadach zamieszczonych w tym rozdziale wykorzystamy projekt apli- kacji internetowej, gdyĔ jest on najbardziej podobny do innych typów projektów, które mieli- Ĉmy okazjö poznaè we wczeĈniejszej czöĈci ksiñĔki. Tworzenie aplikacji internetowych _ 781 Aby utworzyè prosty formularz internetowy, który wykorzystamy w nastöpnym przykäa- dzie, naleĔy uruchomiè Visual Studio .NET i wybraè z menu gäównego opcjö File/New/Project. W oknie dialogowym New Project naleĔy nastöpnie zaznaczyè opcjö Visual C#/Web i wybraè szablon ASP.NET Empty Web Application. Zgodnie z tym, co sugeruje nazwa szablonu, Visual Studio utworzy pustñ aplikacjö internetowñ. W jej skäad bödzie poczñtkowo wchodziä wyäñcznie plik Web.config zawierajñcy ustawienia konfiguracyjne witryny. Aby dodaè do aplikacji nowy formularz, naleĔy wybraè opcjö Pro- ject/Add New Item, po czym wybraè z listy szablonów wyĈwietlonej po lewej stronie okna opcjö Visual C#/Web. Nastöpnie naleĔy wybraè szablon Web Form i nadaè mu nazwö HelloWeb.aspx. W rezultacie Visual Studio utworzy takĔe plik kodu ukrytego o nazwie HelloWeb.aspx.cs, który bödzie moĔna zobaczyè w panelu Solution Explorer po rozwiniöciu opcji HelloWeb.aspx. (Dodat- kowo pojawi siö takĔe plik HelloWeb.aspx.designer.cs, w którym Visual Studio bödzie umiesz- czaè wszelki kod, który musi wygenerowaè automatycznie. Nie naleĔy w nim umieszczaè Ĕad- nego wäasnego kodu, gdyĔ Visual Studio usuwa ten plik i odtwarza go za kaĔdym razem, gdy musi wprowadziè do wygenerowanego kodu jakieĈ zmiany). Pliki kodu ukrytego Przyjrzyjmy siö nieco dokäadniej plikom aspx oraz plikom kodu ukrytego utworzonym przez Visual Studio. Najpierw zobaczmy kod HTML zapisany w pliku HelloWeb.aspx. Podczas edycji plików aspx Visual Studio moĔe je wyĈwietlaè w trzech róĔnych widokach. DomyĈlnym jest widok Ēródäa (Source) prezentujñcy kod HTML. U doäu okna edytora znajdujñ siö trzy przyciski, które pozwalajñ przeäñczaè siö pomiödzy trzema dostöpnymi widokami: widokiem projektu (Design) prezentujñcym zawartoĈè strony w taki sposób, w jaki bödzie ona wyĈwietlana w przeglñdarce, widokiem Ēródäa (Source) prezentujñcym nieprzetworzony kod HTML strony oraz widokiem podzielonym (Split) prezentujñcym stronö jednoczeĈnie na dwa opisane wczeĈniej sposoby. Jak moĔna zauwaĔyè, formularz zostaä utworzony na stronie przy uĔyciu standardowego znacznika form jözyka HTML: form id= form1 runat= server Formularze internetowe ASP.NET wymagajñ, by na stronie znajdowaä siö przynajmniej jeden formularz HTML umoĔliwiajñcy zarzñdzanie interakcjñ z uĔytkownikiem, dlatego teĔ Visual Studio utworzyäo go podczas dodawania nowej strony aspx. Atrybut runat= server jest kluczem do caäej magii, która póĒniej bödzie wykonywana na serwerze. KaĔdy znacznik zawierajñcy ten atrybut jest traktowany jako kontrolka serwerowa, która powinna zostaè wykonana przez ASP.NET Framework na serwerze. Choè form jest standardowym znacznikiem HTML, to atrybut runat do tego standardu nie naleĔy. Jednak ASP.NET usuwa ten atrybut z kodu HTML przed jego przesäaniem do przeglñdarki. Ma on jakiekolwiek znaczenie wyäñcznie na serwerze. Wewnñtrz formularza Visual Studio umieszcza otwierajñcy i zamykajñcy znacznik div, pomiödzy którymi moĔna wstawiaè wäasne kontrolki oraz tekst. Po utworzeniu pustego formularza pierwszñ czynnoĈciñ, jakñ Czytelnik zapewne bödzie chciaä wykonaè, bödzie umieszczenie na nim jakiegoĈ tekstu. Po przeäñczeniu siö do widoku Ēródäa moĔna dodawaè kod bezpoĈrednio do pliku HTML. W ten sposób moĔemy na przy- käad dodaè jakñĈ zawartoĈè do elementu div umieszczonego w sekcji body strony aspx, tak jak to pokazano na listingu 21.1 (dodany fragment zostaä wyróĔniony pogrubionñ czcionkñ). 782 _ Rozdziaĥ 21. Tworzenie aplikacji w ASP.NET Listing 21.1. Dodawanie zawartoĈci HTML @ Page Language= C# AutoEventWireup= true CodeFile= HelloWeb.aspx.cs Inherits= ProgrammingCSharpWeb.HelloWeb !DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Transitional//EN http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd html xmlns= http://www.w3.org/1999/xhtml head runat= server title /title /head body form id= form1 runat= server div Witaj, Ăwiecie! Teraz jest: = DateTime.Now.ToString() /div /form /body /html W ten sposób na stronie zostanie wyĈwietlone powitanie oraz aktualny lokalny czas: Witaj, Ăwiecie! Teraz jest 2011-12-18 23:40:42 Znaczniki oraz dziaäajñ dokäadnie tak samo jak we wczeĈniejszej wersji technologii ASP — oznaczajñ kod, który zostaä pomiödzy nimi umieszczony (w naszym przypadku jest to kod C#). Znak równoĈci (=) znajdujñcy siö bezpoĈrednio za znacznikiem otwierajñcym sprawia, Ĕe ASP.NET przetworzy umieszczone za nim wyraĔenie i wyĈwietli jego wartoĈè. Wykonajmy zatem tö stronö, naciskajñc klawisz F5. Dodawanie kontrolek Kontrolki serwerowe moĔna umieszczaè na formularzu na trzy sposoby: samodzielnie piszñc w pliku aspx odpowiedni kod, przeciñgajñc je z panelu Toolbox (przy czym w tym przypadku moĔna je umieszczaè na stronie zarówno w widoku Ēródäa, jak i w widoku projektu) lub ewentualnie piszñc kod, który doda kontrolki w trakcie dziaäania programu. W ramach przy- käadu zaäóĔmy, Ĕe chcemy wyĈwietliè na stronie trzy przyciski opcji zapewniajñce uĔytkow- nikowi skäadajñcemu zamówienie moĔliwoĈè wyboru jednej z trzech firm kurierskich. W tym celu w kodzie strony, wewnñtrz znacznika form , moĔna by umieĈciè nastöpujñcy kod HTML: asp:RadioButton GroupName= Shipper id= Speedy text= Speedy Express Checked= True runat= server /asp:RadioButton asp:RadioButton GroupName= Shipper id= United text= United Package runat= server /asp:RadioButton asp:RadioButton GroupName= Shipper id= Federal text= Federal Shipping runat= server /asp:RadioButton Znacznik asp deklaruje serwerowñ kontrolkö ASP.NET, która podczas przetwarzania strony zostaje zastñpiona zwyczajnym kodem HTML. Po uruchomieniu aplikacji przeglñdarka wyĈwietli zbiór trzech przycisków opcji — wybór jednego z nich spowoduje usuniöcie zaznaczenia pozostaäych. Dokäadnie ten sam efekt moĔna uzyskaè znacznie äatwiej, przeciñgajñc trzy przyciski opcji z panelu Toolbox Visual Studio i upuszczajñc je na formularzu, a jeszcze äatwiejszym rozwiñza- niem bödzie przeciñgniöcie i upuszczenie na formularzu listy przycisków opcji, która bödzie Tworzenie aplikacji internetowych _ 783 zarzñdzaè wszystkimi przyciskami jako jednñ grupñ. Kiedy zaznaczymy kontrolkö przycisku opcji w widoku projektu, pojawi siö inteligentny znacznik (ang. smart tag), proszñc nas o podanie Ēródäa danych (zapewnia to nam moĔliwoĈè powiñzania przycisku z kolekcjñ, na przykäad pobranñ z bazy danych) lub wpisanie ich samemu. Klikniöcie przycisku Edit items powoduje wyĈwietlenie okna ListItem Collection Editor, w którym moĔemy dodaè potrzebne nam trzy przyciski opcji. KaĔdy z przycisków bödzie miaä domyĈlnñ nazwö ListItem, jednak zarówno ich opisy, jak i war- toĈci bödzie moĔna samemu podaè w odpowiednich wäaĈciwoĈciach. MoĔna tam takĔe okreĈliè, które z trzech pól bödzie poczñtkowo zaznaczone (patrz rysunek 21.1). Rysunek 21.1. Kolekcja elementów ListItem Wyglñd listy przycisków opcji moĔna poprawiè, modyfikujñc wartoĈci wäaĈciwoĈci wyĈwie- tlonych w panelu Properties, które okreĈlajñ takie aspekty wyglñdu jak: uĔywana czcionka, kolor, liczba kolumn, kierunek powtarzania (domyĈlnie wybrany jest pionowy) itd. MoĔna to równieĔ zrobiè, korzystajñc z rozbudowanego wsparcia, jakie Visual Studio zapewnia w zakre- sie tworzenia arkuszy stylów CSS (przedstawionego na rysunku 21.2). Rysunek 21.2 pokazuje, Ĕe moĔna przeäñczaè wyĈwietlane w prawym dolnym rogu Visual Studio panele Properties oraz Apply Styles. W przedstawionym przykäadzie uĔyliĈmy panelu Properties, by okreĈliè tekst etykiety ekranowej, a nastöpnie panelu Styles, by utworzyè styl ListBox, który wyĈwietla wokóä listy przycisków obramowanie oraz okreĈla ich czcionkö i kolor. SkorzystaliĈmy takĔe z widoku podzielonego, by móc jednoczeĈnie oglñdaè stronö w widoku Ēródäa oraz projektu. Sekwencja znaczników wyĈwietlana automatycznie u doäu okna Visual Studio pokazuje nasze aktualne poäoĔenie w strukturze dokumentu. Jak widaè, znajdujemy siö w elemencie ListItem w kontrolce ListBox, która jest umieszczona w elemencie div wewnñtrz formularza form1. To naprawdö Ĉwietne narzödzie. 784 _ Rozdziaĥ 21. Tworzenie aplikacji w ASP.NET Rysunek 21.2. Stosowanie wäaĈciwoĈci i stylów Kontrolki serwerowe Technologia Web Forms udostöpnia dwa rodzaje kontrolek serwerowych. Pierwszym z nich sñ serwerowe kontrolki HTML. Wyglñdajñ one niemal identycznie jak zwyczajne znaczniki HTML, jednak posiadajñ dodatkowy atrybut runat= server . Alternatywñ dla serwerowych kontrolek HTML sñ kontrolki serwerowe ASP.NET (ang. ASP.NET server controls; nazywane takĔe czasami kontrolkami internetowymi, ang. web controls). Stworzono je po to, by udostöpniè nieco wygodniejszy interfejs API do pracy ze standardo- wymi kontrolkami HTML. Kontrolki internetowe udostöpniajñ nieco bardziej spójny model obiektowy oraz spójne nazewnictwo wäaĈciwoĈci. W przypadku kontrolek HTML istnieje na przykäad wiele sposobów obsäugi wprowadzania danych: input type= radio input type= checkbox input type= button input type= text textarea KaĔda z tych kontrolek dziaäa inaczej i wymaga zastosowania innych atrybutów. To dosyè przykry efekt nieco przypadkowego rozwoju jözyka HTML we wczesnych latach istnienia WWW. Kontrolki internetowe majñ za zadanie znormalizowaè zbiór dostöpnych elementów Tworzenie aplikacji internetowych _ 785 sterujñcych oraz zapewniè spójne wykorzystanie atrybutów w caäym ich modelu obiektowym. PoniĔej przedstawione zostaäy kontrolki internetowe odpowiadajñce kontrolkom HTML widocz- nym w poprzednim przykäadzie. asp:RadioButton asp:CheckBox asp:Button asp:TextBox rows= 1 asp:TextBox rows= 5 Kod HTML przekazywany do przeglñdarki uĔytkownika nie zawiera znaczników zaczynajñcych siö od asp: (i bardzo dobrze, gdyĔ Ĕadna przeglñdarka nie wiedziaäaby, co z nimi zrobiè). ASP.NET konwertuje je na standardowy kod HTML, a zatem z punktu widzenia klienta nie ma Ĕadnej róĔnicy pomiödzy internetowymi kontrolkami ASP.NET a standardowymi kon- trolkami HTML. Wszystko sprowadza siö wiöc do pytania, z jakiego API bödziemy chcieli korzystaè na serwerze: czy chcemy, by kod na serwerze operowaä na tych samych elementach i wäaĈciwoĈciach, które sñ uĔywane po stronie klienta, czy teĔ wolimy, by kontrolki byäy zgodne z konwencjami uĔywanymi we wszystkich innych klasach biblioteki .NET. W dalszej czöĈci rozdziaäu skoncentrujemy siö na kontrolkach internetowych. Wiézanie danych Choè niektóre treĈci prezentowane przez aplikacje internetowe mogñ byè staäe, to jednak kaĔda interesujñca witryna WWW bödzie siö zmieniaè wraz z upäywem czasu. Dlatego teĔ jest wysoce prawdopodobne, Ĕe bödziemy chcieli, by niektóre kontrolki na stronie wyĈwietlaäy dane, które od czasu do czasu mogñ podlegaè zmianom i które najprawdopodobniej bödñ prze- chowywane w bazie danych. Wiele kontrolek ASP.NET moĔna powiñzaè z danymi, co znacznie uäatwia prezentowanie tych danych oraz ich modyfikacjö. W poprzednim podrozdziale na staäe umieĈciliĈmy na formularzu trzy przyciski opcji, po jednym dla kaĔdej z trzech firm kurierskich, które moĔe wybraè uĔytkownik. Jednak to nie jest najlepsze rozwiñzanie — dostawcy siö zmieniajñ, a poza tym istnieje duĔe prawdopodo- bieþstwo, Ĕe w przyszäoĈci bödziemy chcieli nawiñzaè wspóäpracö takĔe z innymi firmami kurierskimi. Nie chcemy, by kaĔda zmiana relacji biznesowych zmuszaäa nas do röcznego modyfikowania tych kontrolek. Znacznie bardziej rozsñdnym rozwiñzaniem bödzie zapisanie listy firm kurierskich w bazie danych i powiñzanie ich z przyciskami opcji wyĈwietlanymi na formularzu. W tym podrozdziale dowiemy siö, w jaki sposób moĔna utworzyè te kontrolki dynamicznie i powiñzaè je z informacjami przechowywanymi w bazie danych, korzystajñc w tym celu z moĔliwoĈci wiñzania z bazñ danych zapewnianej przez kontrolkö RadioButtonList. Dodajmy zatem do naszej aplikacji nowy formularz o nazwie DisplayShippers.aspx i wyĈwietlmy go w widoku podzielonym. Teraz musimy przeciñgnñè kontrolkö RadioButtonList z panelu Toolbox, umieszczajñc jñ na naszym nowym formularzu — bñdĒ to w panelu widoku projektu, bñdĒ to w kodzie Ēródäowym wewnñtrz znacznika div . JeĈli z lewej strony okna Visual Studio nie jest widoczny panel Toolbox z kontrolkñ przycisków opcji, to moĔna go wyĈwietliè, wybierajñc z menu gäównego opcjö View/Toolbox, a nastöpnie rozwijajñc zakäadkö Standard. By uporzñdkowaè kontrolki, moĔna kliknñè w panelu Toolbox prawym przyciskiem myszy i z wyĈwietlonego menu kontekstowego wybraè opcjö Sort Items Alphabetically. 786 _ Rozdziaĥ 21. Tworzenie aplikacji w ASP.NET Nastöpnie w widoku projektu naleĔy kliknñè na „inteligentnej” ikonie nowej kontrolki — nie- wielkiej strzaäce wyĈwietlonej w jej prawym górnym rogu. Z wyĈwietlonego menu naleĔy wybraè opcjö Choose Data Source, a na ekranie pojawi siö okno dialogowe Data Source Configuration Wizard przedstawione na rysunku 21.3. Rysunek 21.3. Okno dialogowe Data Source Configuration Wizard W oknie tym naleĔy rozwinñè listö Select a data source i wybraè z niej opcjö New Data Source . Nastöpnie zostaniemy poproszeni o wybór Ēródäa danych spoĈród typów danych dostöpnych na komputerze. PowinniĈmy wybraè opcjö Database, podaè identyfikator i kliknñè przycisk OK. Na ekranie zostanie wyĈwietlone okno dialogowe Configure Data Source przedstawione na rysunku 21.4. MoĔemy albo wybraè istniejñce poäñczenie z bazñ danych, albo utworzyè nowe. W naszym przypadku skorzystamy z tej drugiej moĔliwoĈci — kliknijmy zatem przycisk New Connection, by je skonfigurowaè. Na ekranie zostanie wyĈwietlone okno dialogowe Add Connection. Kolejnym krokiem bödzie wypeänienie pól formularza: naleĔy wybraè nazwö serwera, podaè informacje o sposobie logowania siö do niego (w razie wñtpliwoĈci naleĔy wybraè opcjö Windows Authentication) oraz podaè nazwö bazy danych (w naszym przykäadzie bödzie to Northwind). Koniecznie powinniĈmy takĔe pamiötaè o klikniöciu przycisku Test Connection, by przetestowaè poäñczenie z bazñ danych. Kiedy wszystko bödzie dziaäaè prawidäowo, moĔna kliknñè przy- cisk OK, tak jak to pokazano na rysunku 21.5. Po klikniöciu przycisku OK wäaĈciwoĈci poäñczenia zostanñ wpisane do okna dialogowego Configure Data Source. Warto jeszcze raz siö im przyjrzeè, a jeĈli wszystko bödzie w porzñdku, Wiézanie danych _ 787 Rysunek 21.4. Wybieranie poäñczenia ze Ēródäem danych moĔna kliknñè przycisk Next. JeĈli chcemy zapisaè poäñczenie w pliku konfiguracyjnym web.config, to na kolejnej stronie kreatora powinniĈmy podaè jego nazwö (np. NorthWindConnec ´tionString). Po klikniöciu kolejnego przycisku Next bödziemy mieli moĔliwoĈè okreĈlenia tabel i kolumn, które chcemy pobieraè, bñdĒ teĔ podania wäasnego zapytania SQL lub nazwy procedury skäa- dowanej, które zostanñ uĔyte do pobrania danych. W naszym przykäadzie powinniĈmy rozwinñè listö Tables i przewinñè jej zawartoĈè tak, by byäa widoczna opcja Shippers. Nastöpnie powinniĈmy zaznaczyè pola ShipperID oraz CompanyName, jak pokazano to na rysunku 21.6. W dalszej kolejnoĈci naleĔy ponownie kliknñè przycisk Next i przetestowaè poäñczenie, by spraw- dziè, czy z bazy danych sñ pobierane oczekiwane wartoĈci (co pokazano na rysunku 21.7). W koþcu nadszedä czas, by poäñczyè utworzone przed chwilñ Ēródäo danych z kontrolkñ Radio ´ButtonList. Kontrolka ta (podobnie jak wiökszoĈè innych list) rozróĔnia wartoĈè wyĈwietla- nñ (w naszym przypadku nazwö firmy kurierskiej) oraz wartoĈè wyboru (w naszym przykäa- dzie jest niñ identyfikator firmy kurierskiej). Pola te naleĔy wskazaè w kreatorze, wybierajñc je z list rozwijalnych, tak jak to pokazano na rysunku 21.8. 788 _ Rozdziaĥ 21. Tworzenie aplikacji w ASP.NET Rysunek 21.5. Okno dialogowe Add Connection Sprawdzanie kodu Zanim przejdziemy dalej, naleĔy zwróciè uwagö na kilka zagadnieþ. Kiedy naciĈniemy kla- wisz F5, by uruchomiè aplikacjö, zostanie ona wyĈwietlona w przeglñdarce, a strona, zgodnie z oczekiwaniami, bödzie prezentowaäa grupö przycisków opcji. MoĔemy teraz wybraè opcjö Choose View/Source, a przekonamy siö, Ĕe do przeglñdarki zostaä przesäany prosty kod HTML przedstawiony na listingu 21.2. Listing 21.2. Kod Ēródäowy wygenerowanej strony !DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Transitional//EN http://www.w3.org/TR/ xhtml1/DTD/xhtml1-transitional.dtd html xmlns= http://www.w3.org/1999/xhtml head title /title /head body form method= post action= DisplayShippers.aspx id= form1 div class= aspNetHidden Wiézanie danych _ 789 Rysunek 21.6. Konfiguracja polecenia Select input type= hidden name= __VIEWSTATE id= __VIEWSTATE value= /wEPDwUJMjMzNjY1MzU4D2QWAgIDD2QWAgIBDxAPFgIeC18hRGF0YUJvdW5kZ2QQFQMOU3BlZWR5 IEV4cHJlc3MOVW5pdGVkIFBhY2thZ2UQRmVkZXJhbCBTaGlwcGluZxUDATEBMgEzFCsDA2dnZ2RkZCOksd8 IILjpH4OAdNkxGqjSa0RYAA3N2F8zJz4lyxsv / /div div class= aspNetHidden input type= hidden name= __EVENTVALIDATION id= __EVENTVALIDATION value= /wEWBQK02+CfAgL444i9AQL544i9AQL644i9AQL3jKLTDWylFXks1YMe8G5o7AkyHjJysQk0 Cliwu8U/2yTrYA/Y / /div div table id= RadioButtonList1 tr td input id= RadioButtonList1_0 type= radio name= RadioButtonList1 value= 1 / label for= RadioButtonList1_0 Speedy Express /label /td /tr tr td input id= RadioButtonList1_1 type= radio name= RadioButtonList1 value= 2 / label for= RadioButtonList1_1 United Package /label /td /tr tr td input id= RadioButtonList1_2 type= radio name= RadioButtonList1 value= 3 / label for= RadioButtonList1_2 Federal Shipping /label /td /tr 790 _ Rozdziaĥ 21. Tworzenie aplikacji w ASP.NET Rysunek 21.7. Testowanie zapytania /table /div /form /body /html Zwróèmy uwagö, Ĕe w powyĔszym kodzie HTML nie ma elementu RadioButtonList; zawiera on tabelö z komórkami, wewnñtrz których sñ umieszczone standardowe kontrolki HTML oraz etykiety. A zatem ASP.NET przeksztaäciä swoje kontrolki na kod HTML zrozumiaäy dla kaĔdej przeglñdarki WWW. Wrogo nastawiony uĔytkownik moĔe utworzyè Ĕñdanie wyglñdajñce dokäadnie tak jak prawidäowe dane przesäane z naszego formularza, lecz zawierajñce zupeänie inne, nieoczekiwane przez nas wartoĈci. MoĔe mu to zapewniè moĔliwoĈè wyboru opcji, która nie powinna byè dla niego dostöpna (na przykäad opcji dostöpnej wyäñcznie dla uprzywilejowanych uĔytkowników), bñdĒ nawet umoĔliwiè przeprowadzenie ataku SQL injection (wstrzykniöcia kodu SQL). A zatem w przypadkach udostöpniania w formularzach HTML istotnych informacji takich jak wartoĈci kluczy gäównych naleĔy zachowaè szczególnñ ostroĔnoĈè i pamiötaè o tym, Ĕe dane pochodzñce z formularza wcale nie muszñ byè tymi, które zostaäy do niego przesäane. Wiöcej informacji na temat pisania bezpiecznych aplikacji .NET moĔna znaleĒè na stronie http://msdn.microsoft. com/security/. Wiézanie danych _ 791 Rysunek 21.8. Wiñzanie przycisków opcji ze Ēródäem danych Dodawanie kontrolek i formularzy Wystarczy dodaè do naszej przykäadowej strony kilka kolejnych kontrolek, by utworzyè kom- pletny formularz zapewniajñcy moĔliwoĈè prowadzenia interakcji z uĔytkownikiem. W tym celu dodamy bardziej odpowiednie powitanie („Witamy w NorthWind”), pole tekstowe pozwa- lajñce na podanie imienia, dwa nowe przyciski (Zamów oraz Anuluj) i tekst, który umoĔliwi nam wyĈwietlanie komunikatów dla uĔytkownika. Wyglñd strony po wprowadzeniu tych mody- fikacji przedstawiliĈmy na rysunku 21.9. Ten formularz nie wygraäby Ĕadnej nagrody dla najlepszego projektu, niemniej jednak pozwoli nam przedstawiè kilka kluczowych zagadnieþ zwiñzanych z formularzami Web Forms. Nigdy nie spotkaliĈmy programisty, który by nie uwaĔaä, Ĕe potrafi zaprojektowaè idealny interfejs uĔytkownika. JednoczeĈnie nigdy nie udaäo nam siö spotkaè takiego, który by to rzeczywiĈcie potrafiä. Projektowanie interfejsów uĔytkownika jest jednñ z tych umiejötnoĈci (tak jak nauczanie), które kaĔdy w jego wäasnej opinii posiada, jednak które bardzo niewiele naprawdö utalentowanych osób rozwinöäo w wystarczajñcym stopniu. Jako programiĈci doskonale znamy swoje ograniczenia: piszemy kod, a ktoĈ inny roz- mieszcza kontrolki na stronie, zapewniajñc ich odpowiedniñ uĔytecznoĈè. Czytelnikom zainteresowanym tymi zagadnieniami gorñco polecamy ksiñĔkö Don’t Make me Think: A Common Sense Approach to Web Usibility napisanñ przez Steve’a Kruga i wydanñ przez wydawnictwo New Riders Press oraz Why Software Sucks... and What You Can Do About It napisanñ przez Davida Platta i wydanñ przez wydawnictwo Addison-Wesley. 792 _ Rozdziaĥ 21. Tworzenie aplikacji w ASP.NET Rysunek 21.9. Dokoþczony formularz z listñ firm kurierskich Listing 21.3 przedstawia kompletny kod pliku aspx. Listing 21.3. ZawartoĈè pliku aspx @ Page Language= C# AutoEventWireup= true CodeBehind= DisplayShippers.aspx.cs Inherits= ProgrammingCSharpWeb.DisplayShippers !DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Transitional//EN http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd html xmlns= http://www.w3.org/1999/xhtml head runat= server title /title /head body form id= form1 runat= server div Witamy w NorthWind /div div Twoje imiÚ: asp:TextBox ID= txtName runat= server /asp:TextBox /div div Kurier: /div div asp:RadioButtonList ID= rblShippers runat= server DataSourceID= SqlDataSource1 DataTextField= CompanyName DataValueField= ShipperID /asp:RadioButtonList asp:SqlDataSource ID= SqlDataSource1 runat= server ConnectionString= $ ConnectionStrings:NorthwindConnectionString SelectCommand= SELECT [ShipperID], [CompanyName] FROM [Shippers] /asp:SqlDataSource /div div asp:Button ID= btnOrder runat= server Text= Zamów / asp:Button ID= Button2 runat= server Text= Anuluj / /div div Wiézanie danych _ 793 asp:Label id= lblMsg runat=server /asp:Label /div /form /body /html Kiedy uĔytkownik kliknie przycisk Zamów, odczytamy wartoĈè wpisanñ przez niego w polu tekstowym oraz wyĈwietlimy komunikat potwierdzajñcy wybór jednej z firm kurierskich. Trzeba pamiötaè, Ĕe w momencie projektowania formularza nie jest ona znana, gdyĔ nazwy wszystkich dostöpnych firm sñ pobierane z bazy danych w trakcie dziaäania aplikacji, niemniej jednak moĔemy pobraè z kontrolki RadioButtonList wybranñ nazwö lub identyfikator. Aby to zrobiè, naleĔy wyĈwietliè formularz w widoku projektu i dwukrotnie kliknñè przycisk Zamów. W rezultacie Visual Studio wyĈwietli plik kodu ukrytego oraz utworzy procedurö obsäugi zdarzeþ Click przycisku. Aby uproĈciè kod naszej przykäadowej aplikacji, nie bödziemy sprawdzaè, czy uĔyt- kownik wpisaä swoje imiö w polu tekstowym. Informacje na temat kontrolek, które znacznie upraszczajñ takñ weryfikacjö poprawnoĈci danych, moĔna znaleĒè w ksiñĔce ASP.NET. Programowanie. W kodzie obsäugujñcym zdarzenie okreĈlamy treĈè wyĈwietlanego komunikatu, umieszczajñc w niej imiö odczytane z pola tekstowego oraz tekst i wartoĈè kontrolki RadioButtonList: protected void btnOrder_Click(object sender, EventArgs e) { lblMsg.Text = Witaj, + txtName.Text.Trim() + . DziÚkujemy za zamówienie. + WybraïeĂ firmÚ kurierskÈ + rblShippers.SelectedItem.Text + o identyfikatorze + rblShippers.SelectedValue + . ; } Po uruchomieniu naszej aplikacji moĔna zauwaĔyè, Ĕe poczñtkowo Ĕaden z przycisków opcji nie jest zaznaczony. Podczas wiñzania listy ze Ēródäem danych nie okreĈliliĈmy, która z warto- Ĉci powinna byè traktowana jako domyĈlna. MoĔna to zrobiè na kilka róĔnych sposobów, jednak najprostszym z nich jest dodanie jednego wiersza kodu do metody Page_Load automa- tycznie tworzonej przez Visual Studio: protected void Page_Load(object sender, EventArgs e) { rblShippers.SelectedIndex = 0; } Zastosowanie powyĔszego kodu sprawi, Ĕe zostanie zaznaczony pierwszy przycisk opcji w kontrolce RadioButtonList. W powyĔszym rozwiñzaniu wystöpuje jeden dosyè subtelny pro- blem. OtóĔ kiedy uruchomimy aplikacjö, zostanie zaznaczony pierwszy przycisk, a jeĈli nastöp- nie wybierzemy drugi lub trzeci i klikniemy WyĈlij, to okaĔe siö, Ĕe po ponownym wyĈwie- tleniu strony znowu bödzie zaznaczony przycisk pierwszy. MoĔe siö zatem wydawaè, Ĕe nie da siö wybraè Ĕadnej innej opcji poza pierwszñ. Dzieje siö tak dlatego, Ĕe za kaĔdym razem, gdy strona jest wyĈwietlana, zostaje wykonane zdarzenie OnLoad, a procedura jego obsäugi zawsze zaznacza pierwszy z przycisków opcji w kontrolce RadioButtonList. Jednak nam chodzi o to, by ten pierwszy przycisk zostaä zaznaczony wyäñcznie podczas pierw- szego wyĈwietlenia strony, lecz nie podczas kolejnych wyĈwietleþ nastöpujñcych po klikniöciu przycisku WyĈlij. 794 _ Rozdziaĥ 21. Tworzenie aplikacji w ASP.NET Aby rozwiñzaè ten problem, wystarczy umieĈciè wiersz kodu zaznaczajñcy pierwszy przycisk kontrolki RadioButtonList wewnñtrz instrukcji warunkowej sprawdzajñcej, czy formularz zostaä przesäany na serwer: protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { rblShippers.SelectedIndex = 0; } } W momencie wykonywania strony sprawdzana jest wartoĈè wäaĈciwoĈci IsPostBack. Za pierw- szym razem przyjmie ona wartoĈè false, zatem pierwsze pole kontrolki zostanie zaznaczone. Kiedy zaznaczymy jakiĈ przycisk opcji i klikniemy przycisk WyĈlij, strona zostanie przesäana na serwer w celu jej przetworzenia (co spowoduje wykonanie procedury obsäugi btnOrder_Click), a nastöpnie zostanie odesäana do klienta. W tym przypadku wäaĈciwoĈè IsPostBack przyjmie wartoĈè true, co sprawi, Ĕe kod umieszczony wewnñtrz instrukcji if nie zostanie wykonany. Dziöki temu, jak pokazano to na rysunku 21.10, po ponownym wyĈwietleniu strony bödzie na niej zaznaczony przycisk wybrany wczeĈniej przez uĔytkownika. Rysunek 21.10. Wybór uĔytkownika zachowany po ponownym wyĈwietleniu strony Listing 21.4 przedstawia kompletny kod ukryty obsäugujñcy nasz przykäadowy formularz. Listing 21.4. Kod ukryty umieszczony w pliku DisplayShippers.aspx.cs using System; namespace ProgrammingCSharpWeb { public partial class DisplayShippers : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) Wiézanie danych _ 795 { rblShippers.SelectedIndex = 0; } } protected void btnOrder_Click(object sender, EventArgs e) { lblMsg.Text = Witaj, + txtName.Text.Trim() + . DziÚkujemy za zamówienie. + WybraïeĂ firmÚ kurierskÈ + rblShippers.SelectedItem.Text + o identyfikatorze + rblShippers.SelectedValue + . ; } } } Podsumowanie W tym rozdziale pokazaliĈmy, jak moĔna utworzyè prostñ aplikacjö ASP.NET, korzystajñc z technologii Web Forms. PowiñzaliĈmy listö przycisków opcji z tabelñ bazy danych i dodaliĈmy kod obsäugujñcy zdarzenia po stronie serwera zapewniajñcy nam moĔliwoĈè reagowania na czynnoĈci wykonywane na stronie przez uĔytkownika. 796 _ Rozdziaĥ 21. Tworzenie aplikacji w ASP.NET Skorowidz .NET 4, 16 aplikacja A abstrakcyjne klasy bazowe, 138 ACL, access control list, 493 Adams Matthew, 819 ADO.NET, 542 dostöp do danych, 543 zbiory danych, 545 ADO.NET EntityClient, 574 adres, 491 adres bazowy, 492 adres IP, 526 adres usäugi, 497 adresy IPv4, 526 adresy IPv6, 526 agregacja, 122, 301, 303 AJAX, Asynchronous JavaScript and XML, 476 akcesor get, 82, 260 set, 82, 260 aktualizacja encji, 585 aktualizacje, 480 algorytm asymetryczny, 445 kryptograficzny, 445 mieszajñcy, 604 symetryczny, 445 analiza obiektowa, 80 animacje, 757 anulowanie operacji, 193, 669 Any CPU, 719 API, 85 API HTTP, 482 API XML, 456 aplikacja konsolowa, 31, 597 ChatHost, 490 Network Monitor, 489 niepodpisana, 438 podpisana, 437 Silverlight, 698, 737 WWW, 476 APM, Asynchronous Programming Model, 656, 658 architektura x86, 717 args, 36, 57 argumenty opcjonalne, 731 argumenty tablicowe, 237 ASCII, 369 asocjacje, associations, 122, 559 ASP.NET, 21, 489, 777 asynchroniczne metody, 518 asynchroniczne operacje wejĈcia-wyjĈcia, 430 asynchroniczne uzyskiwanie odpowiedzi, 520 atak typu SQL injection, 544 atak typu zeroday, 505 Atom, 517 AtomPub, 588 atrybut, attribute, 675 [Flags], 99 address, 492 AttributeUsage, 678 baseAddress, 492 DefaultParameterValueAttribute, 109 DllImport, 721 Namespace, 498 OptionalAttribute, 109 PublicKeyToken, 603 XmlIgnoreAttribute, 473 atrybuty konstruowanie, 678 moĔliwe cele, 676 nazywanie, 678 podzespoäów, 677 uĔywanie, 679 817 atrybuty wäasne, 677 XML, 460, 740 697 automatyzacja COM, COM automation, 25, 693, automatyzacja programu Word, 693 B bardziej znaczñcy bajt, 376 baza danych, 547, 550 bezpieczeþstwo, 493 bezpieczeþstwo wñtków, 508 biaäe znaki, whitespace, 83, 277, 364 biblioteka, 37 .NET Framework, 20, 35, 182 ChatServerLibrary, 490 kernel32.dll, 720 mscorlib, 40, 604 Task Parallel Library, 623, 625, 660 TPL, 667 biblioteki klas, Class Library, 20, 597 kontrolek i XAML, 763 typu, type library, 713 bieĔñcy katalog roboczy, 384 BigInteger, 49 BlockingCollection, 654 blok case, 63 blok catch, 222 blok finally, 226 blokada, 645 blokada hierarchiczna, lock leveling, 645 blokada referencji this, 643 blokada SpinLock, 650 blokady odczytu i zapisu, 651 bäñd BadImageFormatException, 718 bäödy programistyczne, 700 sprawdzane jawnie, 216 typograficzne, 362 wystöpujñce najczöĈciej, 200 buforowanie, 428 C C# 4.0, 16 camelCase, 83 camelCasing, 113 cecha, feature, 664 chronione klasy wirtualne, 187 ciasteczka, cookies, 506, 524 CLI, Common Language Infrastructure, 24, 104 818 _ Skorowidz CLR, Common Language Runtime, 21, 23 COM, Component Object Model, 626, 712, 715 CPU, central processing unit, 616 CRUD, Create, Read, Update, and Delete, 577 Ctrl+Alt+C, 213 Ctrl+D, 805 Ctrl+F5, 31, 226 Ctrl+O, 805 Ctrl+Shift+A, 64 Ctrl+Shift+N, 29 Ctrl+T, 805 cykl Ĕycia strony, 780 czas bieĔñcy, 538 czas UTC, 534 czas Ĕycia kontekstu, 586 czcionka, font, 324 czyszczenie danych, 357 D DDoS, 538 debugger, 67, 213 debugowanie, 500 debugowanie programów wielowñtkowych, 621 debugowanie wartoĈci zwracanych, 213 defekt, bug, 199 definicja EDM, 575 interfejsu ISet T , 318 izolowania, 436 operatora Where, 570 definiowanie interfejsów, 149 klas, 35, 81 konstruktora, 86 kontraktu, 484 metod, 112 typów, 35 wäasnych atrybutów, 678 wäasnych znaczników, 456 deklaracja pola, 91 deklaracja typu wyliczeniowego, 97 deklaracja wäaĈciwoĈci, 182 deklarowanie metod statycznych, 115 deklarowanie typów delegacji, 167 deklarowanie zmiennej tablicowej, 236 dekodowanie, 371 dekompilator, 734 dekompozycja funkcjonalna, 79 delegacja, 166, 180 Action, 174 anonimowa, 177 Check, 175 DocumentProcess, 169 EventHandler, 186 QuickCheck, 175 delegacje do funkcji, 182 delegacje i zmienne, 167 delegacje predykatów, 243 delegacje we wäaĈciwoĈciach, 180 deserializacja XML, 469 deszyfracja, 444, 450 Dijkstra Edsger, 71 dll, dynamic link library, 37 DLR, Dynamic Language Runtime, 704 däugoĈè transakcji, 582 DNS, Domain Name Service, 526 dodawanie blokowania do klasy, 644 elementów, 256 encji, 578 formularzy, 792 komponentu COM, 712 kontrolek, 783, 792 metody rozszerzenia, 279 odwoäania, 595 odwoäania do usäugi, 498 wäaĈciwoĈci, 82, 87 dokument RFC867, 530 dokumentacja biblioteki .NET, 41 dokumentacja MSDN, 101, 227, 659 DOM, Document Object Model, 456 domena aplikacji, appdomain, 231, 609 domkniöcie, closure, 184 dostawca bazy danych LINQ, 547, 570 dostöp do danych, 542, 550 dostöp do encji, 574 dostöp do klasy, 600 dostöp do äaþcuchów poäñczeþ, 576 dostöp do wspóädzielonych danych, 583 Double.NaN, 205 Double.NegativeInfinity, 205 Double.PositiveInfinity, 205 drzewa wyraĔeþ, expression trees, 179, 571 dwustronne kontrakty, duplex contracts, 504 dwustronny klient, 511 dynamiczne wywoäywanie metody, 688 dyrektywa using, 32 dyrektywa using System.Linq, 276 dyski SSD, Solid State Driver, 629 dziaäanie równolegäe, parallel execution, 611 dzieci, child elements, 454 dziedziczenie, 124, 132, 565 dziedzina aplikacji, 609 dziel i rzñdĒ, 77 dzielenie caäkowite, 53 dzielenie äaþcucha znaków, 354 dzielenie przez zero, 204 dzielenie zmiennoprzecinkowe, 53 E EDM, Entity Data Model, 552 element, 742 behavior, 494 ContentPresenter, 767 endpoint, 492, 502 gäównt, root element, 454 host, 492 Image, 756 MediaElement, 756 Path, 752 PostNote, 487 przodka, 454 serviceDebug, 494 wäaĈciwoĈci, property element, 743 elementy, 453 formatu, 345 graficzne, 752 interfejsu, 739 potomne, 454 XML, 459 encja SalesOrderHeader, 573 encje, 553 Entity Framework, 541, 551, 570 modele, 551 odwzorowywanie, 551 enumeratory, 265 ESQL, Entity SQL, 570 exe, executable, 37 F filtr, 708 filtr dynamiczny, 708 filtrowanie, 285 filtrowanie za pomocñ LINQ, 708 finalizacja, 670 flaga FileOptions.Asynchronous, 432 flaga FileOptions.None, 432 format big-endian, 376 daty, 341 dziesiötny, 332 JPEG, 757 JSON, 588 liczbowy, 335 liczbowy niestandardowy, 337 ogólny, 334 Skorowidz _ 819 format PNG, 757 powrotny, round trip, 336 procentowy, 335 staäoprzecinkowy, 334 szesnastkowy, 332 uniwersalny, 342 wykäadniczy, 333 wykäadniczy bez okreĈlonej precyzji, 334 formatowanie, 348 formatowanie danych, 330 formatowanie wartoĈci walutowych, 331 formularz, 806 formularz z powiñzanymi kontrolkami, 810 funkcja, 78, 178 CreateCustomerList, 458 CreateFile, 725 get_NazwaWlasciwosci, 147 MoveFile, 720 ReadFile, 726 set_NazwaWlasciwosci, 147 funkcje JavaScript, 699 mieszaj
Pobierz darmowy fragment (pdf)

Gdzie kupić całą publikację:

C#. Programowanie. Wydanie VI
Autor:
, ,

Opinie na temat publikacji:


Inne popularne pozycje z tej kategorii:


Czytaj również:


Prowadzisz stronę lub blog? Wstaw link do fragmentu tej książki i współpracuj z Cyfroteką: