Эта статья была написана в 2003 году и остается одной из наших самых популярных публикаций. Если вы хотите больше узнать о ASP.NET, вы можете найти эту недавнюю статью о ASP.NET и MVC большой интерес.
Когда я впервые научился использовать .NET, я прочитал обзорное сравнение между ASP.NET и ASP. Мне бросилось в глаза конкретное предложение: «В ASP.NET вы можете использовать Response.Write, но это не рекомендуется».
Я подумал про себя: «Не рекомендуется? Как я напишу свой HTML? Как я буду перебирать свои наборы данных и создавать таблицы? »Я видел сетку данных, и она отлично подходит для отображения необработанной таблицы данных, но как, я спросил себя, я бы выписал только один столбец? Что если данные были смешаны с HTML?
Я нашел ответ в своем новом любимом ASP.NET Server Control: Repeater. В этой статье я покажу вам, как я использовал его для создания левого бокового меню для моего собственного сайта, которое выглядит следующим образом:
Я храню категории меню в таблице « Sub_Category
» в SQL Server, поэтому, если мне когда-нибудь понадобится добавить одну, я просто добавлю ее в таблицу, и она появится в меню. В таблице есть два поля: Sub_Category_ID
и Sub_Category_Text
.
Шаг 1 — Создайте страницу и вставьте Repeater
управления Repeater
Элемент управления Repeater
позволяет создавать шаблоны для определения макета его содержимого. Шаблоны:
-
ItemTemplate
— используйте этот шаблон для элементов, которые отображаются один раз для каждой строки данных. -
AlternatingItemTemplate
— используйте этот шаблон для элементов, которые отображаются в каждой строке данных. Это позволяет вам чередовать цвета фона, например. -
HeaderTemplate
— используйте этот шаблон для элементов, которые вы хотите визуализировать один раз перед разделомItemTemplate
. -
FooterTemplate
— используйте этот шаблон для элементов, которые вы хотите визуализировать один раз после разделаItemTemplate
. -
SeperatorTemplate
— используйте этот шаблон для элементов рендеринга между каждой строкой, например разрывов строк.
Вот часть веб-формы (subcategories.aspx), которая содержит Repeater
:
.... <asp:Repeater ID="catlist" runat="server"> <HeaderTemplate> <tr> <td class="imgspace"> <img src="Images/areas.jpg" width="91" height="28" class="bigtext"> </td> </tr> </HeaderTemplate> <ItemTemplate> <tr> <td> <div align=center> <asp:HyperLink class="text" NavigateUrl="<%# "mainframeset.aspx?CatType=" + DataBinder.Eval(Container.DataItem,"Sub_Category_ID")%>" Text="<%#DataBinder.Eval(Container.DataItem, "Sub_Category_Text")%>" runat="server" target="mainFrame" ID="Hyperlink1" NAME="Hyperlink1"/> <br></div> </td> </tr> </ItemTemplate> <FooterTemplate> <tr> <td> </td> </tr> </FooterTemplate> </asp:Repeater> ....
Repeater
имеет название « catlist
». Он использует HeaderTemplate
для печати изображения Areas
. Затем он использует ItemTemplate
для отображения ItemTemplate
управления Hyperlink
котором находятся наши данные. Мы вернемся к этому на втором шаге.
FooterTemplate
не является необходимым, но я поместил его здесь для согласованности.
Шаг 2 — Получить данные
Теперь давайте посмотрим на получение данных. Вот событие Page_Load
в файле кода позади.
private void Page_Load(object sender, System.EventArgs e) { SqlConnection conDotNet = new SqlConnection "Server=xxxxxxx;UID=xxxx;PWD=xxxxx;Database=DotNetGenius"); string sSQL = "Select sub_category_id, sub_category_text from Sub_Category"; SqlCommand cmd = new SqlCommand(sSQL, conDotNet); conDotNet.Open(); SqlDataReader dtrCat = cmd.ExecuteReader(); catlist.DataSource = dtrCat; catlist.DataBind(); }
Первые пять строк открывают соединение с базой данных и извлекают содержимое таблицы Sub_Category
. Последние две строки связывают наш элемент управления Repeater
с DataReader
. Теперь давайте снова посмотрим на раздел ItemTemplate
:
<ItemTemplate> <tr> <td> <div align=center> <asp:HyperLink class="text" NavigateUrl="<%# "mainframeset.aspx?CatType=" + DataBinder.Eval(Container.DataItem,"Sub_Category_ID")%>" Text="<%#DataBinder.Eval(Container.DataItem, "Sub_Category_Text")%>" runat="server" target="mainFrame" ID="Hyperlink1" NAME="Hyperlink1"/> <br></div></td></tr> </ItemTemplate>
После DataBind
метода DataBind
элемента управления Repeater
ASP.NET перебирает DataReader
и заполняет Repeater
указанными нами данными. Метод Databinder.Eval
использует отражение, чтобы анализировать и оценивать выражение привязки данных к объекту во время выполнения, в этом случае объект является нашим Repeater
. Итак, эта строка кода:
NavigateUrl="<%# "mainframeset.aspx?CatType=" + DataBinder.Eval(Container.DataItem,"Sub_Category_ID")%>"
отобразит содержимое поля "Sub_Category_ID"
для каждой строки в DataReader
.
Если вы проводите много времени с ASP.NET, вы наверняка будете часто использовать этот элемент управления. Надеюсь, вам это пригодится!
Если вам понравилось читать этот пост, вы полюбите Learnable ; место, чтобы узнать новые навыки и приемы у мастеров. Участники получают мгновенный доступ ко всем электронным книгам и интерактивным онлайн-курсам SitePoint, таким как вводная веб-разработка с использованием ASP.NET .