Статьи

Использование ASP.NET Repeater Control

Эта статья была написана в 2003 году и остается одной из наших самых популярных публикаций. Если вы хотите больше узнать о ASP.NET, вы можете найти эту недавнюю статью о ASP.NET и MVC большой интерес.

Когда я впервые научился использовать .NET, я прочитал обзорное сравнение между ASP.NET и ASP. Мне бросилось в глаза конкретное предложение: «В ASP.NET вы можете использовать Response.Write, но это не рекомендуется».

Я подумал про себя: «Не рекомендуется? Как я напишу свой HTML? Как я буду перебирать свои наборы данных и создавать таблицы? »Я видел сетку данных, и она отлично подходит для отображения необработанной таблицы данных, но как, я спросил себя, я бы выписал только один столбец? Что если данные были смешаны с HTML?

Я нашел ответ в своем новом любимом ASP.NET Server Control: Repeater. В этой статье я покажу вам, как я использовал его для создания левого бокового меню для моего собственного сайта, которое выглядит следующим образом:

1014_menu

Я храню категории меню в таблице « 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 .