Языки

» Html
» Java Script

» PHP

» Perl

» ASP

» CGI

» Xml

» Dhtml

» VBScript

» Java

» Css

Уроки

» Photoshop

» Corel Draw

» Dreamwawer

» Flash MX

Скачать

» Программы

» Книги

Шаблоны

» Сайтов

» Flash

» Скрипты

Active Server Pages

 » ASP для новичков

     » Главная страница

     » ASP для новичков

Поиск и отображение информации

Вернемся к нашему проекту сайта знакомств. Мы уже создали страницу, при помощи которой посетитель сайта может внести в базу данных информацию о себе. Теперь необходимо реализовать поиск по этой базе.

Итак, нам потребуется создать еще две Web-страницы. На одной из них. посетитель сайта сможет задать условия поиска по базе данных, а на другой Web-странице ему будет показан результат его запроса.

Естественно, поиск данных будет производиться при помощи SQL-запроса, основанного на ключевом слове select. Однако здесь следует сделать некоторое отступление. В предыдущем примере мы использовали SQL-запрос, который не возвращал каких-либо данных. SQL-запрос select обязательно будет возвращать некоторое множество записей из основной таблицы. Это множество записей будет являться источником данных для Web-страницы, показывающей результат запроса пользователя. Подобные источники данных в ASP.NET реализуются при помощи типа DataSet. Его структуру мы рассмотрим в следующем разделе главы, а в этом разделе мы просто приведем пример его использования.

Итак, для начала необходимо спроектировать Web-страницу, на которой пользователь будет указывать критерии поиска по базе данных. Эту страницу мы назовем search.aspx. Затем, все введенные данные будут переданы Web-странице с наименованием bind.aspx. При загрузке этой страницы будет сформирован запрос select, опираясь на критерии пользователя. Затем этот запрос будет выполнен, и его результаты будут отображены в таблице.

Так как наша база данных очень невелика, то и критериев поиска будет немного. Мы предоставим пользователю возможность указать пол пользователей при помощи группы переключателей. В листинге 4.3 приведен HTML-код страницы в режиме ее разработки.

Лисгинг 4.3

<%@ Page Language="vb" AutoEventWireup="false" Codebehind="search.aspx.vb" Inherits="dating. search"%>

lDOCTYPE HTML PUBLIC "-//W3C//DTD

HTML 4.0 Transitional//EN">

<HEAD>

<titlex/title>

<meta content="Microsoft Visual Studio. NET 7.0" name=" GENERATOR ">

<meta content="Visual Basic 7.0" name="CODE_LANGUAGE">

<meta content=" JavaScript" name="vs_defaultClientScript">

ta content="http: //schemas .microsoft.com/intellisense/ie5"

"vs targetSchema">

  </HEAD>

 <body MS POSITIONING="GridLayout">

<form id="Forml" method="post" runat="server">

<asp: label id="Labell" style="Z-INDEX: 101; LEFT: 41px;

POSITION: absolute;

TOP: 20px" runat=" server" Height="19px" Width="196px">Укaжитe критерии поиска</азр: label>

<asp: label id="Labe!2" style="Z-INDEX: 102; LEFT: 41px;

POSITION: absolute;

TOP: 51px" runat="server">nc^</asp: label>

<asp:radiobuttonlist id="RadioButtonListl" style="Z-INDEX: 103; LEFT: 41px;

POSITION: absolute;

TOP: Slpx" runat="server">

<asp:List!tem Value="0" Selected="True">Myжcкoй</asp:ListItem>

<asp:List!tem Value="l">Жeнcкий</asp:ListItem>

</asp: radiobuttonlist>

<asp:button id="Buttonl" style="Z-INDEX: 109; LEFT: 44px;

 POSITION: absolute;

TOP: 140px" runat=" server" Height="24px" Width="120px" Text= "Искать ! ">

</asp:button>

</form>

</body>

</HTML>

При нажатии на кнопку Искать! пользователь должен быть направлен на другую Web-страницу, которая и будет производить поиск. Поэтому обработчик нажатия кнопки будет достаточно прост. Полный код класса, реализующего созданную Web-страницу, приведен в листинге 4.4.

Листинг 4.4

Public Class search

Inherits System. Web. UI . Page

Protected WithEvents Label2 As System. Web. UI .WebControls .Label

Protected WithEvents RadioButtonListl

As System.Web.UI.WebControls.RadioButtonList

Protected WithEvents Label3

As System.Web.UI.WebControls.Label Protected WithEvents Label4

As System.Web.UI.WebControls.Label Protected WithEvents Label5

As System.Web.UI.WebControls.Label Protected WithEvents TextBoxl

As System.Web.UI.WebControls.TextBox Protected WithEvents TextBox2

As System.Web.UI.WebControls.TextBox Protected WithEvents Buttonl

As System.Web.UI.WebControls.Button Protected WithEvents Labell

As System.Web.UI.WebControls.Label

#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 Buttonl_Click(ByVal sender As System.Object, ByVal

e As System.EventArgs) Handles Buttonl.Click

Session.Add("sex", RadioButtonListl.Selectedlndex) Response.Redirect("bind.aspx")

End Sub

End Class

Видно, что при нажатии пользователем кнопки, информация, введенная им, передается на следующую страницу при помощи стандартной коллекции Объекта Session.

Теперь рассмотрим процедуру создания Web-страницы, которая будет осуществлять поиск и отображение его результатов. Для отображения результатов поиска мы будем использовать компонент DataGrid, который позволяет отображать таблицу, связанную с каким-либо набором данных. Этот компонент имеет множество настроек внешнего вида, которые могут устанавливаться в визуальном режиме. Для этого в контекстном меню компонента следует выполнить команду Property Builder (Построитель свойств), и будет отражено диалоговое окно, в котором и следует устанавливать свойства. однако, наша задача сейчас не украсить таблицу, а добиться того, чтобы ней отображались результаты поиска. Поэтому оставим компонент в том , как он создается по умолчанию. В листинге 4.5 показан HTML-код задаваемой Web-страницы в режиме разработки.

Листинг 4.5

<%@ Page Language="vb" AutoEventWireup="false" Codebehind="bind.aspx.vb" jplnherits="dating.bind"%>

<! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<HTML>

<HEAD>

<titlex/title>

<meta content="Microsoft Visual Studio.NET 7.0" name="GENERATOR">

<meta content="Visual Basic 7.0" name="CODE_LANGUAGE">

<meta content="JavaScript" name="vs_defaultClientScript">

<meta content="http: //schemas.microsoft.com/intellisense/ie5" 1 name="vs_targetSchema">

</HEAD>

<body MS_POSITIONING="GridLayout">

<form id="Forml" method="post" runat="server">

<asp:datagrid id="DataGridl" style="Z-INDEX: 101; LEFT: 28px;

POSITION: absolute;

TOP: 22px" runat="server" Height="165px" Width="348px" ShowHeader="False"x/asp:datagrid>

</form>

</body>

</HTML>

А теперь, после того, как мы увидели HTML-код страницы, следует привести исполняемый код ее класса. Он показан в листинге 4.6.

Листинг 4.6

Public Class bind

Inherits System.Web.UI.Page

Protected WithEvents DataGridl

As System.Wet^UI.WebControls.DataGrid

#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

Dim DS As DataSet

Dim DataConnection As Data.SqlClient.SqlConnection

Dim DataCommand As Data.SqlClient.SqlDataAdapter

Dim SelectCommand As String = "select USNAME, EMAIL, ABOUT, AGE from Dating where (SEX = @Sex)"

DataConnection = New

Data.SqlClient.SqlConnection("server=(LOCAL); _ uid=sa;pwd=;database=Dating")

DataCommand = New Data.SqlClient.SqlDataAdapter(SelectCommand, DataConnection)

DataCommand.SelectCommand.Parameters.Add(New Data.SqlClient.SqlParameter("8Sex", System.Data.SqlDbType.Int, 2))

DataCommand.SelectCommand.Parameters("@Sex").Value = Session.Itern("sex")

DS = New DataSet() DataCommand.Fill(DS, "Dating")

DataGridl.DataSource = DS DataGridl.DataBind()

End Sub

End Class 

Этот код следует детально рассмотреть. Поиск и отображение результатов происходят при загрузке Web-страницы, поэтому мы используем обработчик события page_Load. Также нам потребуется по одному экземпляру трех раз-S личных объектов. Мы используем уже знакомый нам объект sqiconnection f для установки соединения с базой данных, объект sqiDataAdapter, который I предназначен для выполнения SQL-запроса и получения данных из таблицы, а также объект DataSet, который и получит извлеченные данные, а затем послужит источником данных для таблицы. Также в процедуре объявля- 1 ется переменная seiectcommand типа string. В этой переменной будет /храниться текст -SQL-запроса select. Следует отметить, что в этом запросе также используется один параметр.

После того, как объявлены все переменные, создается соединение с базой сданных при помощи конструктора класса sqiconnection. Затем в коллекцию параметров запроса добавляется параметр целочисленного типа. С помощью следующего оператора этому параметру присваивается значение, которое хранилось в элементе коллекции объекта Session. После этого ''Выполняется метод Fill переменной DataCommand. В качестве параметров методу передается переменная типа DataSet и наименование таблицы, из которой извлекаются данные. Этот метод заполняет набор данных DS. Осталось только соединить полученный набор данных с таблицей DataGridl.

Соединение набора данных с таблицей происходит при помощи свойства DataSource, присущего компоненту DataGrid. А после того, как источник данных для таблицы задан, необходимо отобразить данные в ней. Для этого мы используем метод DataBind. В результате, после запроса пользователя, все записи из базы данных, удовлетворяющие условию, будут отображены в таблице.

Листинг 4.7

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<HTML>

<HEAD>

<title>

</title>

<meta content="Microsoft Visual Studio.NET 7.0" name="GENERATOR">

<meta content="Visual Basic 7.0" name="CODE_LANGUAGE">

<meta content="JavaScript" name="vs_defaultClientScript">

cmeta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">

</HEAD>

<body MS_POSITIONING="GridLayout">

<form name="Forml" method="post" action="bind.aspx" id="Forml">

<table cellspacing="0" rules="all" border="l" id="DataGridl" style="height:165px;width:348px;

border-collapse:collapse;Z-INDEX: 101; LEFT: 28px;

POSITION: absolute;

TOP: 22px">

<tr>

<td>

Татьяна

</tdxtd>

tanya@mail.ru </tdxtd>

У меня серые глаза

</tdxtd>

22

</td>

</trxtr>

<td>

Елена

</tdxtd>

lena@mail. ru </tdxtd>

Я олично готовлю

</td>

<td>

31

</td>

</tr>

<tr>

<td>

Светлана

</tdxtd>

svetagmail.ru

</tdxtd>

Натуральная блондинка

</td>

<td>

19

</td>

</tr>

<tr>

<td>

Вера

</td>

<td>

vera@mail.ru

</tdxtd>

А я не знаю, что про себя рассказать </tdxtd>

24

</td>

</tr>

</table>

</form>

</body>

</HTML>

В следующем разделе главы мы рассмотрим структуру объекта Dataset, который позволяет хранить наборы данных и отображать их на Web-страицах, а пока укажем еще на одну интересную возможность компонента DataGrid.

В нашем примере таблица не заняла много места на Web-странице. Но ведь Далеко не всегда объемы получаемых данных будут настолько малы, что их можно будет разместить на одной Web-странице. В тех случаях, когда таблица получается слишком большая, ее можно разбить на несколько страниц. Для этого необходимо в режиме разработки страницы выполнить для объекта DataGrid команду контекстного меню Property Builder (Построитель свойств). На отображенном диалоговом окне следует выбрать вкладку Paging (Разбиение на страницы).

Для того чтобы таблицу можно было разбивать на несколько частей, каждая из которых отображалась бы на отдельной Web-странице, следует поставить флажок в независимом переключателе Allow paging (Разрешить разбиение на страницы). После этого разработчик получает доступ ко всем остальным органам управления, расположенным на этой вкладке.

Прежде всего, следует указать, сколько строк таблицы будет размещаться на одной странице. Это количество строк указывается в поле Page size (Размер страницы). Для того чтобы пользователь мог перемещаться между страницами, на которых расположена таблица, следует отображать кнопки перехода между страницами. Активация этих кнопок произойдет, если в диалоговом окне отметить флажок в независимом переключателе Show navigation buttons (Показать кнопки управления). Расположение кнопок управления между страницами регулируется при помощи пунктов выпадающего списка Position (Расположение). А текст надписей на этих кнопках указывается в полях текстового ввода Next Page Button Text (Кнопка текста следующей страницы) и Previous Page Button Text (Кнопка текста предыдущей страницы).

Итак, мы рассмотрели способы отображения информации из базы данных в таблице. Теперь следует ознакомиться со структурой объекта sqiDataAdapter.

Сохранить документ

Сохранить документ (.doc)

Распечатать документ

Напечатать

 

Следующий урок


Общение
» Чат

» Форум

Реклама 

Здесь может быть Ваша реклама

Поиск

» Поиск

Статистика 

Связь
» Web дизайнер

» Ваша реклама

» Отзывы

» О проекте

 



Сайт управляется системой uCoz