Programowanie w ASP .NET. Ćwiczenie praktyczne №2(2 godz.) Cele pracy: 1.Tworzenie stron ASP.Net. Wykorzystanie formularzy oraz kontrolki serwerowe ASP.NET: Panel, Table, ImageButton, LinkButton. 2. Projektowanie aplikacji ASP.NET wykorzystujące połączenie z bazą danych ACCESS. Opracowanie wiązania danych z kontrolkami DataGrid, GridView. Badanie właściwości DataGrid, GridView. Zadania wykonywane przed przystąpieniem do realizacji p.1 : Zapoznać się z pojęciami i podstawami wykorzystania kontrolek ASP.NET Czym różnią się kontrolki ASP.NET od kontrolek HTML (Interfejs, Właściwości, Browser)? Aplikacje typu „code-behind” (oddzielenie kodu języka programowania od języka HTML) Bloki deklarowania kodu ASP.NET i kontrolek. Zdarzenia i właściwości kontrolek ASP.NET. Stosowanie kontrolek serwerowych ASP.NET: Panel, Table, ImageButton, LinkButton. Kolejność wykonania ćwiczenia dla realizacji p.1: 1.1 .Stworzenie stron z wykorzystaniem kontrolki Panel. Kontrolka Panel jest potrzebna dla reprezentowania określonego obszaru okna przeglądarki, w celu przechowywania, dynamicznego dodawania lub ukrywania innych kontrolek. Metoda ADD() kolekcji CONTROLS umożliwia dodanie dynamiczne utworzonej kontrolki do panelu. Utwórz kontrolkę Panel, której tłem jest dowolny rysunek. Następnie utwórz 3 przyciski Button. Pierwszy przycisk ma wyświetlać napis: „To jest kontrolka” (rys.1.1), drugi przycisk - wyświetlać bądź ukrywać kontrolkę Panel, trzeci przycisk – dynamicznie dodać dwie kontrolki Label i jedną kontrolkę TextBox (rys.1.2). Rys.1.1 Rys.1.2 Okno projektu w środowisku VisualStudio .NET z właściwościami kontrolki Panel jest pokazane na rys. 1.3. Rys1.3. Okno projektu z właściwościami klawisza Button jest pokazane na rys. 1.4. Rys.1.4 Fragmenty kodu pliku WebForm1.aspx.vb dla obrabiania zdarzeń są pokazane na rys.1.5. Public Class WebForm1 Inherits System.Web.UI.Page Protected WithEvents Panel1 As System.Web.UI.WebControls.Panel Protected WithEvents Button1 As System.Web.UI.WebControls.Button Protected WithEvents Button2 As System.Web.UI.WebControls.Button Protected WithEvents Button3 As System.Web.UI.WebControls.Button Protected WithEvents Label2 As System.Web.UI.WebControls.Label Protected WithEvents Label1 As System.Web.UI.WebControls.Label Protected WithEvents LablPanel As System.Web.UI.WebControls.Label Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As _ System.EventArgs) Handles Button1.Click Label2.Text = "<H2>To jest kontrolka:Panel</H2>" End Sub Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As _ System.EventArgs) Handles Button3.Click LablPanel = New Label() LablPanel.Text = "<H3> To Jest Panel</H3>" LablPanel.ID = "Labl_1Panel" Panel1.Controls.Add(LablPanel) Dim TBoxPanel As New TextBox() TBoxPanel.Text = "Kontrolka nr 2" TBoxPanel.ID = "TBox_1Panel" Panel1.Controls.Add(TBoxPanel) Dim Label2Panel As New Label() Label2Panel.Text = "<H2>Sa: " + Panel1.Controls.Count.ToString()+ _ " Kontrolki </H2>" Label2Panel.ID = "Lab_2Panel" Panel1.Controls.Add(Label2Panel) End Sub End Class Rys.1.5 1.2.Stworzenie stron z wykorzystaniem kontrolki Table. Kontrolka Table służy do budowania statycznych lub dynamicznych tablic zawierających statyczny tekst. Utwórz kontrolkę Table. Następne dopisz do niej dynamicznie wiersz zawierający dwie kontrolki Label. Utwórz wie kontrolki Button – pierwsza ma wyświetlać bądź ukrywać kontrolkę Table, druga – dynamicznie dodać nowe kontrolki Label. Wygląd przeglądarki jest pokazany na rys.1. 6 Rys.1.6 Na rys. 1.7 jest pokazany wygląd przeglądarki przy naciśnięciu klawisza „Dopisz wiersz”. Rys.1.7 Kod klasy WebForm1 jest pokazany na rys. 1.8. Public Class WebForm1 Inherits System.Web.UI.Page Protected WithEvents Tab As System.Web.UI.WebControls.Table Protected WithEvents But1 As System.Web.UI.WebControls.Button Protected WithEvents Label1 As System.Web.UI.WebControls.Label Protected WithEvents But2 As System.Web.UI.WebControls.Button #Region " Web Form Designer Generated Code " 'This call is required by the Web Form Designer. <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent() End Sub Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init 'CODEGEN: This method call is required by the Web Form Designer 'Do not modify it using the code editor. InitializeComponent() End Sub #End Region Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'Put user code to initialize the page here End Sub Private Sub But2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles But2.Click Dim S() As String = {"CLR", "CTS"} Dim RW As TableRow = New TableRow() Dim C1 As TableCell = New TableCell() Dim Lab1 As Label = New Label() Lab1.Text = S(0) Lab1.ID = "L1" C1.Controls.Add(Lab1) RW.Cells.Add(C1) Dim C2 As TableCell = New TableCell() Dim Lab2 As Label = New Label() Lab2.Text = S(1) Lab2.ID = "L2" C2.Controls.Add(Lab2) RW.Cells.Add(C2) Tab.Rows.Add(RW) End Sub Private Sub But1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles But1.Click If (Tab.Visible) Then Tab.Visible = False Else Tab.Visible = True End If End Sub End Class Rys.1.8 1.3. Stworzenie stron z wykorzystaniem kontrolki ImageButton Kontrolka ImageButton reprezentuje przycisk Button, którego tłem jest rysunek zapisany w oddzielnym pliku. Kontrolka ImageButton ma metodę OnClick, która może być użyteczna w praktycznych zastosowaniach. Z tą kontrolką jest związane zdarzenie System.Web.UI.ImageClickEventArgs, które zwraca pozycję wskaźnika myszy na rysunku kontrolki. Utworzyć kontrolkę Labal oraz ImageButton która ma wyświetlać współrzędne kliknięcia myszką na obrazku tła kontrolki. Utworzyć przycisk Button, który ma wyświetlać bądź ukrywać kontrolkę imageButton. Ewentualny wygląd kontrolki w przeglądarce jest pokazany na rys. 1.9 Rys.1.9 Kod klasy jest pokazany na rys.1.10. Public Class WebForm1 Inherits System.Web.UI.Page Protected WithEvents ImgBut Protected WithEvents But As Protected WithEvents Label1 Protected WithEvents Lab As As System.Web.UI.WebControls.ImageButton System.Web.UI.WebControls.Button As System.Web.UI.WebControls.Label System.Web.UI.WebControls.Label Private Sub But_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles But.Click If (ImgBut.Visible) Then ImgBut.Visible = False Else ImgBut.Visible = True End If End Sub Private Sub ImgBut_Click(ByVal sender As System.Object, ByVal e As System.Web.UI.ImageClickEventArgs) Handles ImgBut.Click Lab.Text = "<B>Wspólrzedne klikniecia : " + _ e.X.ToString() + " x " + e.Y.ToString() + "</B>" If ((e.X > 87) And (e.X < 118) And (e.Y > 44) And (e.Y < 67)) Then Lab.Text += "<BR><B> Trafiles w srodek obrazka!</B></BR>" Else Lab.Text += "<BR><B> Nie trafiles w srodek obrazka!</B></BR>" End If End Sub End Class Rys.1.10 1.4. Stworzenie stron z wykorzystaniem kontrolki LinkButton Kontrolka LinkButton reprezentuje łącze, którego kliknięcie myszą powoduje wywołanie wybranej metody. Kontrolki LinkButton i ImageButton zawierają zdarzenie OnCommand, dzięki któremu możliwe jest, na podstawie właściwości CommandName i/lub CommandArgument, określenie wybranej przez użytkownika kontrolki i przeprowadzenie stosownej akcji wraz z wyświetleniem odpowiedniego komunikatu. Zdarzenie OnMouseOut = „alert(‘Dziękujemy’)” jest przykładem zdarzenia wykonywanego po stronie klienta(IE) w języku JavaScript. Wygląd IE po naciśnięciu klawisza ImageButton jest pokazany na rys. 1.11 Rys.1.11 Kod klasy WebForm1 jest pokazany na rys. 1.12 ublic Class WebForm1 Inherits System.Web.UI.Page Protected WithEvents LinkBut1 As System.Web.UI.WebControls.LinkButton Protected WithEvents LinkBut2 As System.Web.UI.WebControls.LinkButton Protected WithEvents ImgBut As System.Web.UI.WebControls.ImageButton Protected WithEvents Lab2 As System.Web.UI.WebControls.Label Protected WithEvents Lab As System.Web.UI.WebControls.Label Sub Wybierz(ByVal sender As System.Object, CommandEventArgs) Select Case e.CommandName Case "Where" Lab.Text = "<H3> Prosze czekac. roku...</H3>" Case "Select" Lab.Text = "<H3> Prosze czekac. Autorów...</H3>" Case Else Lab.Text = "<H3> Prosze czekac. End Select End Sub ByVal e As Wyszykiwanie danych z 2004 Wyszykiwanie Usuwanie danych!...</H3>" End Class Rys. 1.12 2. Projektowanie aplikacji ASP.NET wykorzystujące połączenie z bazą danych ACCESS. Opracowanie wiązania danych z kontrolkami DataGrid, GridView. Badanie właściwości DataGrid, GridView. Zadania wykonywane przed przystąpieniem do realizacji p.2: Zapoznać się z następnymi podstawami połączenia z bazą danych w środowisku .NET: Przeznaczenia obiektu DataSet. Przeznaczenia obiektu OleDbConnection. Przeznaczenia obiektu OleDbDataAdapter. Wiązanie danych z kontrolkami ASP.NET. Właściwości kontrolki DataGrid Właściwości kontrolki GridView Główne etapy uzyskiwania dostępu do danych w ASP.NET: 1-Ustanowienie połączenia z BD, 2- Otwarcie połączenia z BD, 3-Zapisywanie odpowiednich danych w obiekcie DataSet, 4- Skonfigurowanie obiektu DataView, aby wyświetlać dane, 5-Powiązanie serwerowego obiektu sterującego z obiektem DataView. Kolejność wykonania ćwiczenia w p.2: 2.1 Stwórz aplikacje poszukującą dani w bazie danych w środowisku ACCESS i odwzorowującej te dani na stronie internetowej. Aplikacja musi zawierać bazę danych, kontrolkę DataGrid, Label, Button. Rys.2.1 Projekt wykorzysta bazę w środowisku ACCESS. Baza zawiera jedną „EmployeeBirthdays” z nazwami i formatami kolumn wyznaczonymi na rys.2.2. tabele Rys.2.2. Przykład uzupełnienia pól tabeli „EmployeeBirthdays” jest pokazany na rys. 2.3. Rys.2.3. Uwaga! Kontrolka DataGrid nie ma odpowiedniej ikony graficznej w Toolbox VS2005. Dla wpisania kontrolki DataGrid do panelu DESIGN trzeba przełączyć się do panelu SOURCE oraz wpisać w sposób ręczny następujące znaczniki: <asp:DataGrid runat=server ID = dgBirthdays> </asp:DataGrid> W tym przypadku kontrolka DataGrid zostaje utworzona i jest widoczna na panelu DESIGN . Wszystkie inne parametry DataGrid można wpisywać z utworzonej kontrolki w panelu DESIGN. W listingu jest pokazany kod strony INDEX.ASPX. 2.2 Stwórz podobną stronę za dopomogą kontrolki GridView oraz kontrolki źródła danych AccessDataSource. Właściwość DataSourceID kontrolki GridView musi odwołać się do kontrolki AccessDataSource. Kontrolka AccessDataSource zawiera swój kreator do wyznaczenia bazy danych i formowania polecenia SQL. Ten sposób tworzenia aplikacji Internetowej nie potrzebuje od programisty wpisania żadnej linii kodu. Uwaga! Wyznaczenie kolumn w kontrolce GridView przebiega w sposób podobny do kontrolki DataGrid ale z wyznaczonymi rozbieżnościami. Z początku, w kontrolce GridView, ustal AutoGenerateColumns = False. Dodaj do listy odwzorowanych kolumn dwie kolumny: typu Bound Field oraz HyperLinkField. W kolumnie BoundField ustal właściwość DataField=EmailAddress. W kolumnie HyperLinkField :DataNavigateFields=EmailAddress, DataNavigateURLFormatString=mailto:{0}, DataTextField=FullName. Kolumna HyperlinkField kontrolki GriedView w odróżnieniu od DataGried będzie prawidłowo odwzorowywać format mailto:{0} tylko wtedy, kiedy będzie przetworzona do formatu TemplateField. Dlatego wybierz stworzoną kolumnę HyperLinkField oraz naciśnij link: Convert this field into a TemplateField. 2.3 Stwórz aplikacje odwzorowującą dani z bazy danych za dopomogą kontrolki „DataGrid”. Napisz kod, który włączy i ustawi paginację wyświetlanych wierszy tabeli w kontrolce DataGrid. Rozmiar przewijanej strony ma wynosić dwa wierszy tabeli w kontrolce DataGrid. Rozmiar przewijanej strony ma wynosić dwa wierszy tabeli. Aplikacja musi wykorzystać bazę danych w środowisku ACCESS, kontrolki Label, Button . Obiekty OleDbDataConnection, OleDbDataAdapter, OleDbDataSet muszą być stworzone za dopomogą wizardów VisualStudio. Na rys.2.4 jest pokazany ewentualny wygląd aplikacji przy uruchomieniu w przeglądarce. Rys.2.4 Na rys. 2.5. jest pokazany wygląd aplikacji po kliknięjciu następnej strony. Rys.2.5 Na rys.2.6 jest pokazane okno projektu „Design” oraz właściwości kontrolki „DataGrid”. Rys.2.6 Na rys. 2.7 jest pokazana zakładka „Paging” właściwości DataGrid. Rys.2.7 Na rys. 2.8. jest pokazana zakładka Columns, gdzie są wyznaczone kolumny odwzorowane w DataGrid. Format odwzorowania danych jest wyznaczony na zakładce Format. Rys. 2.8 W listingu są pokazane fragmenty kodu które zostali wpisane do pliku z klasą tego projektu. Listing. ‘ część kodu do wyznaczenia obiektów DataSet, DataAdapter i in. , podobna do p.1 ... Private Sub Button1_Click(ByVal sender As System.EventArgs) Handles Button1.Click Me.OleDbDataAdapter1.Fill(DataSet11) DataBind() End Sub System.Object, ByVal Private Sub DataGrid1_PageIndexChanged(ByVal source As Object, _ ByVal e As System.Web.UI.WebControls.DataGridPageChangedEventArgs) _ Handles DataGrid1.PageIndexChanged DataGrid1.CurrentPageIndex = e.NewPageIndex Me.OleDbDataAdapter1.Fill(DataSet11) e As DataGrid1.DataBind() Label1.Text = "<H3>Zostala wybrana strona(CurrentPage) i= " + _ (e.NewPageIndex + 1).ToString + "</H3>" Label2.Text = "<H3>Ilosc stron(PageCount)= " + _ DataGrid1.PageCount.ToString + "</H3>" Label3.Text = "<H3> PageSize = " + _ DataGrid1.PageSize.ToString + _ " rekordów</H3>" End Sub 2.4. Zrealizuj zadania w p.2.3 stosowne kontrolki GridView. Literatura. 1. Chris Payne. ASP.NET dla każdego, Helion, 2002 2. Paweł Chłosta. ASP.NET i kolekcje C#, MIKOM, 2004-10-01 3. Scott Worley. ASP.NET Vademecum profesjonalisty, Helion, 2003 4. Jose Mojica. C# I ASP.NET, Helion, 2004 5. Bill Evjen, Scott Hanselman, Devin Rader. ASP.NET 3.5 z wykorzystaniem C# I VB. Helion 2010 6. Jesse Liberty, Dan Hurwitz. ASP.NET . Programowanie, Helion, 2007. 7. Jesse Liberty. C#. Programowanie, Helion, 2006. 8. Kevin Hoffman. Visual C# 2005, Helion, 2007.