Eдин от най-честите и общи процеси във вашите
Web апликации са
процесите на представяне на данни от бази данни. Microsoft e добавил някои
ASP.NET контроли специално за извеждане на данни. Като добавка повечето от регулярните
ASP.NET сървър контроли като
TextBox, могат да се свържат с източник на
данни. Добрата новина
относно свързването на данни е, че много от контролите за данни, които
разисквахме в глава
Достъп до бази данни се използват и тук. Във
Web формите те се използват по различен начин, но концепцията е
същата. Създайте нова форма
Web Form в проекта с име
PayableData.
aspx. Отначало в дизайнера тази форма е празна. За да добавите свързани с данни (
data-
bound) контроли към тази страница, трябва да осигурите източник на
данни (
data source). Кликнете върху
Toolbox
и от панел
Data tab, довлечете
SqlDataAdapter към страницата. Стартира се
DataAdapter Configuration Wizard, както
видяхте в предишната
глава. Щракнете бутон
Next и ще изберете каква връзка с данните (
data connection) да
използвате.
Използвайте тази, която създадохте и която сочи към база
данни
Payable_Data.dbo. Щракнете
бутон
Next. На следващата страница, изберете
Use SQL Statement и щракнете бутон
Next. В текстовата кутия напишете тази SQL инструкция:
Select * from Vendors. Щракнете бутон
Finish.
Забележка
Да, това е много работа. Има по-прост начин да се
постигнат същите резултати. Използвайки
Server Explorer, можете да довлечете таблица
Vendors през съответния сървър и да я пуснете във вашата форма. Готово! Два контрола се добавиха към
вашата форма:
SqlConnection1 и
SqlDataAdapter1 (виж фигура 118) От меню
Data, изберете
Generate DataSet. Отваря се диалогов прозорец. Изберете да създадете ново
DataSet с име
dsVendors, и оставете вдигната отметката във
въпроса дали искате да добавите инстанция на класа към дизайнера. Visual Studio сега добавя обект
dsVendors, с име
dsVendors1, към вашия дизайнер.
Фигура 118 Адаптера за данни и връзката на таблица Vendors с мрежата за данни (DataGrid).
От тук нататък имате множество
DataSet , което може да бъде запълнено с данни. В
Toolbox, отидете на панел
WebForms tab. Довлечете контрол
DataGrid
към дизайнера.
DataGrid контролът автоматически извежда
данните в мрежов (
grid) формат, използвайки
HTML таблици. След като контрола
DataGrid се изведе на формата, дясно кликване и избирате
Property Builder. Това отваря диалогов прозорец
Properties. На страница
General page, от падащия списък
DataSource
изберете таблица
Vendors на
dsVendors1. В комбобокс
Data Key Field, от падащия списък
изберете първичен ключ на таблица
Vendors
- VendorID. Щракнете бутон
OK.
Обратно в дизайнера, ще
видите че мрежата (
grid) e пораснала, и
сега има колона за всяко поле на базата данни. Още не сте привършили. Двукратно кликване на формата, за да изведете
прозореца за кода. Ще видите събитийна
процедура
PayableData_Load. Добавете следния код:
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
If Not
IsPostBack Then
' оценява
"вярно-true" първия път когато браузерът отвори страницата
Me.SqlConnection1.Open()
Me.SqlDataAdapter1.Fill(DsVendors1)
Me.SqlConnection1.Close()
DataGrid1.DataBind()
End If
End Sub
Първият ред код, който добавихте,
FillDataSet(dsVendors1),
вика подпрограмата, която бе създадена за вас, когато избрахте да генерирате
методи. Тя отива в базата данни, изпълнява инструкцията в
sqlDataAdapter, и
съхранява резултантните записи в
DataSet на което ги подавате като параметър (в този случай,
dsVendors1). Четвъртия ред код,
DataGrid1.
DataBind(), свързва мрежата (
grid) към контрол
DataView, който на ход е свързан към
DataSet. Уверете се, че вашата форма
PayableData е стартова и стартирайте проекта. Ще видите записите от таблица
Vendors в мрежов формат (
grid) на страницата в IE, както
е показано на фигура 119.
Фигура 119 Мрежата за данни ( DataGrid) извежда съдържанието на таблица Vendors само с два реда код.
-
Манипулиране на така наречените само повикващи се страници
(Re-entrant Pages)
Да обсъдим кода в манипулатора на събитието
PayableData_
Load
If Not IsPostback Then ` Оценява true
първия
път, когато браузера отваря страницата
IsPostback
проверката се използва за определяне дали потребителят е викал тази форма преди
това. Помислете за природата на
HTTP: Всеки път когато някой вика формата, това изглежда
като напълно нова заявка за
Web сървъра.
ASP.
NET, записва
някаква
ViewState информация в страницата, когато се изпрати и разгърне
при клиента. Заради това, когато
клиента присъедини страницата обратно към сървъра,
ASP.
NET може да види, че страницата е
пращана преди това при потребителя. По тази причина кодът вътре в инструкция
If се изпълнява само веднаж за всеки потребител, който
изиска тази страница. Примерно, ако искате да
знаете кой потребител е посетил страницата, можете да запишете това само
веднаж, вместо всеки път, когато събитието се подаде към сървъра.
ASP.
NET сървър контролите работят в така наречения модел:
re-entrant page model. С други думи, когато събитията на контролите указват
на формата в страницата да се приеме, страницата вика самата себе си , тоест атрибута
Action във прибавката на формата (
Form tag) сочи същата страница, която вече е визуализирана.
Това означава, че много страници
викат себе си отново и отново и
IsPostback е важно да усъвършенствува разширяемостта на
апликацията. Тук за разлика от Windows апликацията, събитията
Load и
Unload се вдигат много пъти докато се използва същата
страница.
IsPostback осъществява лесен начин да се види дали това е
първото зареждане на конкретния потребител.