Поделиться через


Элементы управления привязкой к данным

от Майкрософт

Большинство ASP.NET приложений используют некоторую степень представления данных из внутреннего источника данных. Элементы управления с привязкой к данным были ключевой частью взаимодействия с данными в динамических веб-приложениях. ASP.NET 2.0 внесены некоторые существенные улучшения в элементы управления с привязкой к данным, включая новый класс BaseDataBoundControl и декларативный синтаксис.

Большинство ASP.NET приложений используют некоторую степень представления данных из внутреннего источника данных. Элементы управления с привязкой к данным были ключевой частью взаимодействия с данными в динамических веб-приложениях. ASP.NET 2.0 внесены некоторые существенные улучшения в элементы управления с привязкой к данным, включая новый класс BaseDataBoundControl и декларативный синтаксис.

BaseDataBoundControl выступает в качестве базового класса для классов DataBoundControl и HierarchicalDataBoundControl. В этом модуле мы обсудим следующие классы, производные от DataBoundControl:

  • AdRotator
  • Элементы управления "Список"
  • GridView
  • Formview
  • Detailsview

Мы также рассмотрим следующие классы, производные от класса HierarchicalDataBoundControl:

  • TreeView
  • Меню
  • SiteMapPath

Класс DataBoundControl

Класс DataBoundControl — это абстрактный класс (помеченный как MustInherit в VB), используемый для взаимодействия с табличными данными или данными в стиле списка. Следующие элементы управления являются некоторыми из элементов управления, производных от DataBoundControl.

AdRotator

Элемент управления AdRotator позволяет отображать графический баннер на веб-странице, связанной с определенным URL-адресом. Отображаемый рисунок поворачивается с помощью свойств элемента управления . Частоту отображения определенной рекламы на странице можно настроить с помощью свойства Показы, а рекламу можно отфильтровать с помощью ключевое слово фильтрации.

Элементы управления AdRotator используют xml-файл или таблицу в базе данных для данных. Следующие атрибуты используются в XML-файлах для настройки элемента управления AdRotator.

ImageUrl

URL-адрес изображения, отображаемого для объявления.

URL-адрес, по которому пользователь должен переходить при щелчке по объявлению. Этот url-адрес должен быть закодирован.

AlternateText

Альтернативный текст, отображаемый в подсказке и считываемый средствами чтения с экрана. Также отображается, если изображение, указанное в ImageUrl, недоступно.

Ключевое слово

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

Просмотры

Весовое число, определяющее, как часто может отображаться определенное объявление. Это относится к впечатлениям от других объявлений в том же файле. Максимальное значение общих показов для всех рекламных объявлений в XML-файле — 2 048 000 000 1.

Высота

Высота объявления в пикселях.

Ширина

Ширина объявления в пикселях.

Примечание

Атрибуты Height и Width переопределяют высоту и ширину самого элемента управления AdRotator.

Типичный XML-файл может выглядеть следующим образом:

<?xml version="1.0" encoding="utf-8" ?> <Advertisements xmlns="http://schemas.microsoft.com/AspNet/AdRotator-Schedule-File"> <Ad> <ImageUrl>~/images/Contoso_ad.gif</ImageUrl> <NavigateUrl>http://www.contoso-ltd.com</NavigateUrl> <AlternateText>Ad for Contoso, Ltd. Web site</AlternateText> <Impressions>100</Impressions> </Ad> <Ad> <ImageUrl>~/images/Aspnet_ad.gif</ImageUrl> <NavigateUrl>http://www.asp.net</NavigateUrl> <AlternateText>Ad for ASP.NET Web site</AlternateText> <Impressions>50</Impressions> </Ad> </Advertisements>

В приведенном выше примере объявление contoso в два раза чаще отображается, чем объявление для веб-сайта ASP.NET из-за значения атрибута Показы.

Чтобы отобразить рекламу из приведенного выше XML-файла, добавьте элемент управления AdRotator на страницу и задайте для свойства AdvertisingFile значение, указывающего на XML-файл, как показано ниже.

<asp:AdRotator ID="AdRotator1" runat="server" AdvertisementFile="App_Data/Ads.xml" />

Если вы решили использовать таблицу базы данных в качестве источника данных для элемента управления AdRotator, сначала необходимо настроить базу данных, используя следующую схему:

Имя столбца Data type Описание
ID int Первичный ключ. Этот столбец может иметь любое имя.
ImageUrl nvarchar(length) Относительный или абсолютный URL-адрес изображения, отображаемого для рекламы.
Navigateurl nvarchar(length) Целевой URL-адрес объявления. Если значение не указано, объявление не является гиперссылкой.
AlternateText nvarchar(length) Текст, отображаемый, если не удается найти изображение. В некоторых браузерах текст отображается в виде подсказки. Альтернативный текст также используется для специальных возможностей, чтобы пользователи, которые не видят рисунок, могли слышать его описание вслух.
Ключевое слово nvarchar(length) Категория объявления, по которой можно фильтровать страницу.
Просмотры int(4) Число, указывающее вероятность того, как часто отображается объявление. Чем больше число, тем чаще будет отображаться объявление. Общее количество значений всех показов в XML-файле не может превышать 2 048 000 000 –1.
Ширина int(4) Ширина изображения в пикселях.
Высота int(4) Высота изображения в пикселях.

Если у вас уже есть база данных с другой схемой, можно использовать свойства AlternateTextField, ImageUrlField и NavigateUrlField , чтобы сопоставить атрибуты AdRotator с существующей базой данных. Чтобы отобразить данные из базы данных в элементе управления AdRotator, добавьте на страницу элемент управления источником данных, настройте строку подключения для элемента управления источником данных, чтобы она указывала на базу данных, а для свойства DataSourceID элемента управления AdRotator задайте идентификатор элемента управления источником данных. Если вам нужно настроить рекламу AdRotator программным способом, используйте событие AdCreated. Событие AdCreated принимает два параметра: один объект , а другой экземпляр AdCreatedEventArgs. AdCreatedEventArgs — это ссылка на создаваемое объявление.

Следующий фрагмент кода задает ImageUrl, NavigateUrl и AlternateText для рекламы программным способом:

protected void AdRotator1_AdCreated(object sender, System.Web.UI.WebControls.AdCreatedEventArgs e) { e.ImageUrl = "images/contoso_ad.gif"; e.NavigateUrl = "http://www.contoso-ltd.com/"; e.AlternateText = "Ad for Contoso, Ltd Web site"; }

Элементы управления списками

Элементы управления list включают ListBox, DropDownList, CheckBoxList, RadioButtonList и BulletedList. Каждый из этих элементов управления может быть привязан к источнику данных. Они используют одно поле в источнике данных в качестве отображаемого текста и при необходимости могут использовать второе поле в качестве значения элемента. Элементы также можно добавлять статически во время разработки, а также смешивать статические и динамические элементы, добавленные из источника данных.

Чтобы привязать данные к элементу управления списком, добавьте на страницу элемент управления источником данных. Укажите команду SELECT для элемента управления источником данных, а затем задайте для свойства DataSourceID элемента управления списком идентификатор элемента управления источником данных. Используйте свойства DataTextField и DataValueField , чтобы определить отображаемый текст и значение для элемента управления . Кроме того, можно использовать свойство DataTextFormatString для управления внешним видом отображаемого текста следующим образом:

Выражение Описание
Цена: {0:C} Для числовых и десятичных данных. Отображает литерал Price:, за которым следуют числа в формате валюты. Формат валюты зависит от параметра языка и региональных параметров, указанных в атрибуте языка и региональных параметров в директиве Page или в файле Web.config.
{0:D4} Для целочисленных данных. Не может использоваться с десятичными числами. Целые числа отображаются в поле с нулевым заполнением, шириной в четыре символа.
{0:N2}% Для числовых данных. Отображает число с точностью до 2 десятичных знаков, за которым следует литерал "%".
{0:000.0} Для числовых и десятичных данных. Числа округляются до одного десятичного разряда. Числа, меньшие чем трехзначные, заполняются нулями.
{0:D} Для данных даты и времени. Отображает длинный формат даты ("Четверг, 6 августа 1996 г."). Формат даты зависит от параметра языка и региональных параметров в файле Web.config.
{0:d} Для данных даты и времени. Отображает короткий формат даты ("31.12.99").
{0:гг-мм-дд} Для данных даты и времени. Отображает дату в числовом формате год-месяц-день (96-08-06)

GridView

Элемент управления GridView позволяет отображать и редактировать табличные данные с помощью декларативного подхода и является преемником элемента управления DataGrid. В элементе управления GridView доступны следующие функции.

  • Привязка к элементам управления источником данных, таким как SqlDataSource.
  • Встроенные возможности сортировки.
  • Встроенные возможности обновления и удаления.
  • Встроенные возможности разбиения по страницам.
  • Встроенные возможности выбора строк.
  • Программный доступ к объектной модели GridView для динамической установки свойств, обработки событий и т. д.
  • Несколько ключевых полей.
  • Несколько полей данных для столбцов гиперссылки.
  • Настраиваемый внешний вид с помощью тем и стилей.

Поля столбцов

Каждый столбец элемента управления GridView представлен объектом DataControlField. По умолчанию свойству AutoGenerateColumns присвоено значение true, что создает объект AutoGeneratedField для каждого поля в источнике данных. Затем каждое поле отображается в виде столбца в элементе управления GridView в том порядке, в который каждое поле отображается в источнике данных. Вы также можете вручную указать, какие поля столбцов отображаются в элементе управления GridView , установив для свойства AutoGenerateColumnsзначение false , а затем определив собственную коллекцию полей столбцов. Различные типы полей столбцов определяют поведение столбцов в элементе управления .

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

Тип поля столбца Описание
BoundField Отображает значение поля в источнике данных. Это тип столбца по умолчанию элемента управления GridView.
ButtonField Отображает командную кнопку для каждого элемента в элементе управления GridView. Это позволяет создать столбец с пользовательскими элементами управления кнопками, такими как кнопка Добавить или Удалить.
CheckBoxField Отображает поле проверка для каждого элемента в элементе управления GridView. Этот тип поля столбца обычно используется для отображения полей с логическим значением.
CommandField Отображает предопределенные кнопки команд для выполнения операций выбора, редактирования или удаления.
HyperLinkField Отображает значение поля в источнике данных в виде гиперссылки. Этот тип поля столбца позволяет привязать второе поле к URL-адресу гиперссылки.
ImageField Отображает изображение для каждого элемента в элементе управления GridView.
TemplateField Отображает пользовательское содержимое для каждого элемента в элементе управления GridView в соответствии с указанным шаблоном. Этот тип поля столбца позволяет создать настраиваемое поле столбца.

Чтобы декларативно определить коллекцию полей столбцов, сначала добавьте открывающий и закрывающий <теги Columns> между открывающим и закрывающим тегами элемента управления GridView. Затем выведите список полей столбцов, которые необходимо включить между открывающим и закрывающим <тегами Columns> . Указанные столбцы добавляются в коллекцию Columns в указанном порядке. Коллекция Columns хранит все поля столбцов в элементе управления и позволяет программно управлять полями столбцов в элементе управления GridView.

Явно объявленные поля столбцов могут отображаться в сочетании с автоматически созданными полями столбцов. При использовании обоих полей сначала отрисовываются явно объявленные поля столбцов, а затем автоматически создаваемые поля столбцов.

Привязка к элементу управления источником данных

Элемент управления GridView можно привязать к элементу управления источником данных (например, SqlDataSource, ObjectDataSource и т. д.), а также к любому источнику данных, реализующим интерфейс System.Collections.IEnumerable (например, System.Data.DataView, System.Collections.ArrayList или System.Collections.Hashtable). Используйте один из следующих методов, чтобы привязать элемент управления GridView к соответствующему типу источника данных:

  • Чтобы выполнить привязку к элементу управления источником данных, задайте для свойства DataSourceID элемента управления GridView значение ID элемента управления источником данных. Элемент управления GridView автоматически привязывается к указанному элементу управления источником данных и может воспользоваться преимуществами возможностей элемента управления источником данных для выполнения функций сортировки, обновления, удаления и разбиения по страницам. Это предпочтительный метод привязки к данным.
  • Чтобы выполнить привязку к источнику данных, реализующего интерфейс System.Collections.IEnumerable, программно задайте для свойства DataSource элемента управления GridView источник данных, а затем вызовите метод DataBind. При использовании этого метода элемент управления GridView не предоставляет встроенные функции сортировки, обновления, удаления и разбиения по страницам. Вам нужно предоставить эту функцию самостоятельно.

Операции управления GridView

Элемент управления GridView предоставляет множество встроенных возможностей, позволяющих пользователю сортировать, обновлять, удалять, выбирать и перелистывать элементы в элементе управления. Когда элемент управления GridView привязан к элементу управления источником данных, элемент управления GridView может воспользоваться возможностями элемента управления источником данных и обеспечить автоматическую сортировку, обновление и удаление.

Примечание

Элемент управления GridView может обеспечить поддержку сортировки, обновления и удаления с другими типами источников данных; однако необходимо предоставить соответствующий обработчик событий с реализацией для этих операций.

Сортировка позволяет пользователю отсортировать элементы в элементе управления GridView относительно определенного столбца, щелкнув заголовок столбца. Чтобы включить сортировку, задайте для свойства AllowSorting значение true.

Функции автоматического обновления, удаления и выбора включаются при нажатии кнопки в поле столбца ButtonField или TemplateField с именами команд "Изменить", "Удалить" и "Выбрать" соответственно. Элемент управления GridView может автоматически добавлять поле столбца CommandField с кнопкой Изменить, Удалить или Выбрать, если свойство AutoGenerateEditButton, AutoGenerateDeleteButton или AutoGenerateSelectButton имеет значение true соответственно.

Примечание

Вставка записей в источник данных напрямую не поддерживается элементом управления GridView. Однако можно вставлять записи с помощью элемента управления GridView в сочетании с элементом управления DetailsView или FormView.

Вместо одновременного отображения всех записей в источнике данных элемент управления GridView может автоматически разбить записи на страницы. Чтобы включить разбиение по страницам, присвойте свойству AllowPaging значение true.

Настройка внешнего вида GridView

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

Свойство Style Описание
AlternatingRowStyle Параметры стиля для чередующихся строк данных в элементе управления GridView. Если это свойство задано, строки данных отображаются попеременно между параметрами RowStyle и AlternatingRowStyle .
EditRowStyle Параметры стиля для строки, редактируемой в элементе управления GridView.
EmptyDataRowStyle Параметры стиля для пустой строки данных, отображаемой в элементе управления GridView, если источник данных не содержит записей.
Нижний колонтитул Параметры стиля для строки нижнего колонтитула элемента управления GridView.
HeaderStyle Параметры стиля для строки заголовка элемента управления GridView.
PagerStyle Параметры стиля для строки пейджера элемента управления GridView.
RowStyle Параметры стиля для строк данных в элементе управления GridView. Если свойство AlternatingRowStyle также задано, строки данных отображаются попеременно между параметрами RowStyle и AlternatingRowStyle .
SelectedRowStyle Параметры стиля для выбранной строки в элементе управления GridView.

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

Свойство Описание
ShowFooter Отображает или скрывает раздел нижнего колонтитула элемента управления GridView.
ShowHeader Отображает или скрывает раздел заголовка элемента управления GridView.

События

Элемент управления GridView предоставляет несколько событий, которые можно программовать. Это позволяет запускать пользовательскую подпрограмму при каждом возникновении события. В следующей таблице перечислены события, поддерживаемые элементом управления GridView.

Событие Описание
PageIndexChanged Происходит при нажатии одной из кнопок пейджера, но после того, как элемент управления GridView обработает операцию разбиения по страницам. Это событие обычно используется, когда необходимо выполнить задачу после перехода пользователя на другую страницу в элементе управления .
PageIndexChanging Происходит при нажатии одной из кнопок пейджера, но до того, как элемент управления GridView обработает операцию разбиения по страницам. Это событие часто используется для отмены операции разбиения по страницам.
RowCancelingEdit Происходит при нажатии кнопки Отмена строки, но до выхода элемента управления GridView из режима редактирования. Это событие часто используется для остановки операции отмены.
RowCommand Происходит при нажатии кнопки в элементе управления GridView. Это событие часто используется для выполнения задачи при нажатии кнопки в элементе управления .
RowCreated Происходит при создании новой строки в элементе управления GridView. Это событие часто используется для изменения содержимого строки при создании строки.
RowDataBound Происходит, когда строка данных привязана к данным в элементе управления GridView. Это событие часто используется для изменения содержимого строки, когда строка привязана к данным.
RowDeleted Происходит при нажатии кнопки Удалить строки, но после того, как элемент управления GridView удаляет запись из источника данных. Это событие часто используется для проверка результатов операции удаления.
Удаление строк Происходит при нажатии кнопки Удалить строки, но до того, как элемент управления GridView удалит запись из источника данных. Это событие часто используется для отмены операции удаления.
RowEditing Происходит при нажатии кнопки Изменить строки, но до того, как элемент управления GridView перейдет в режим редактирования. Это событие часто используется для отмены операции редактирования.
RowUpdated Происходит при нажатии кнопки Обновить строки, но после обновления строки элементом управления GridView. Это событие часто используется для проверка результатов операции обновления.
RowUpdating Происходит при нажатии кнопки Обновить строки, но до того, как элемент управления GridView обновит строку. Это событие часто используется для отмены операции обновления.
SelectedIndexChanged Происходит при нажатии кнопки Выбрать строки, но после того, как элемент управления GridView обработает операцию выбора. Это событие часто используется для выполнения задачи после выбора строки в элементе управления .
SelectedIndexChanging Происходит при нажатии кнопки Выбрать строки, но до того, как элемент управления GridView обработает операцию выбора. Это событие часто используется для отмены операции выбора.
Сортированные. Происходит при щелчке гиперссылки для сортировки столбца, но после того, как элемент управления GridView обработает операцию сортировки. Это событие обычно используется для выполнения задачи после того, как пользователь щелкает гиперссылку для сортировки столбца.
Сортировка Происходит при щелчке гиперссылки для сортировки столбца, но до того, как элемент управления GridView обработает операцию сортировки. Это событие часто используется для отмены операции сортировки или выполнения пользовательской процедуры сортировки.

Formview

Элемент управления FormView используется для отображения одной записи из источника данных. Он похож на элемент управления DetailsView, но отображает пользовательские шаблоны вместо полей строк. Создание собственных шаблонов обеспечивает большую гибкость при управлении отображением данных. Элемент управления FormView поддерживает следующие функции:

  • Привязка к элементам управления источником данных, таким как SqlDataSource и ObjectDataSource.
  • Встроенные возможности вставки.
  • Встроенные возможности обновления и удаления.
  • Встроенные возможности разбиения по страницам.
  • Программный доступ к объектной модели FormView для динамической настройки свойств, обработки событий и т. д.
  • Настраиваемый внешний вид с помощью определяемых пользователем шаблонов, тем и стилей.

Шаблоны

Чтобы элемент управления FormView отображал содержимое, необходимо создать шаблоны для различных частей элемента управления. Большинство шаблонов являются необязательными; однако необходимо создать шаблон для режима, в котором настроен элемент управления. Например, элемент управления FormView, поддерживающий вставку записей, должен иметь определенный шаблон элемента вставки. В следующей таблице перечислены различные шаблоны, которые можно создать.

Тип шаблона Описание
EditItemTemplate Определяет содержимое строки данных, когда элемент управления FormView находится в режиме редактирования. Этот шаблон обычно содержит элементы управления вводом и кнопки команд, с помощью которых пользователь может редактировать существующую запись.
EmptyDataTemplate Определяет содержимое пустой строки данных, отображаемой при привязке элемента управления FormView к источнику данных, который не содержит записей. Этот шаблон обычно содержит содержимое, предупреждающее пользователя о том, что источник данных не содержит записей.
Нижний колонтитул Определяет содержимое строки нижнего колонтитула. Этот шаблон обычно содержит любое дополнительное содержимое, которое вы хотите отобразить в строке нижнего колонтитула. В качестве альтернативы можно просто указать текст для отображения в строке нижнего колонтитула, задав свойство FooterText.
ЗаголовокTemplate Определяет содержимое строки заголовка. Этот шаблон обычно содержит любое дополнительное содержимое, которое вы хотите отобразить в строке заголовка. В качестве альтернативы можно просто указать текст для отображения в строке заголовка, задав свойство HeaderText.
ItemTemplate Определяет содержимое строки данных, когда элемент управления FormView находится в режиме только для чтения. Этот шаблон обычно содержит содержимое для отображения значений существующей записи.
InsertItemTemplate Определяет содержимое строки данных, когда элемент управления FormView находится в режиме вставки. Этот шаблон обычно содержит элементы управления вводом и кнопки команд, с помощью которых пользователь может добавить новую запись.
PagerTemplate Определяет содержимое строки пейджера, отображаемой при включенной функции разбиения по страницам (если свойство AllowPaging имеет значение true). Этот шаблон обычно содержит элементы управления, с помощью которых пользователь может перейти к другой записи.

Элементы управления вводом в шаблоне изменения элемента и шаблона элемента вставки можно привязать к полям источника данных с помощью выражения двусторонней привязки. Это позволяет элементу управления FormView автоматически извлекать значения входного элемента управления для операции обновления или вставки. Выражения двусторонней привязки также позволяют элементам управления вводом в шаблоне элемента редактирования автоматически отображать исходные значения полей.

Привязка к данным

Элемент управления FormView можно привязать к элементу управления источником данных (например, SqlDataSource, AccessDataSource, ObjectDataSource и т. д.) или к любому источнику данных, реализующим интерфейс System.Collections.IEnumerable (например, System.Data.DataView, System.Collections.ArrayList и System.Collections.Hashtable). Используйте один из следующих методов для привязки элемента управления FormView к соответствующему типу источника данных:

  • Чтобы выполнить привязку к элементу управления источником данных, задайте для свойства DataSourceID элемента управления FormView значение идентификатора элемента управления источником данных. Элемент управления FormView автоматически привязывается к указанному элементу управления источником данных и может воспользоваться преимуществами возможностей элемента управления источником данных для выполнения вставки, обновления, удаления и разбиения по страницам. Это предпочтительный метод привязки к данным.
  • Чтобы выполнить привязку к источнику данных, который реализует интерфейс System.Collections.IEnumerable , программно задайте для свойства DataSource элемента управления FormView источник данных, а затем вызовите метод DataBind. При использовании этого метода элемент управления FormView не предоставляет встроенные функции вставки, обновления, удаления и разбиения по страницам. Эту функцию необходимо предоставить с помощью соответствующего события.

Операции элемента управления FormView

Элемент управления FormView предоставляет множество встроенных возможностей, позволяющих пользователю обновлять, удалять, вставлять и просматривать элементы в элементе управления. Когда элемент управления FormView привязан к элементу управления источником данных, элемент управления FormView может воспользоваться преимуществами возможностей элемента управления источником данных и обеспечить автоматическое обновление, удаление, вставку и разбиение по страницам. Элемент управления FormView может обеспечивать поддержку операций обновления, удаления, вставки и разбиения по страницам с другими типами источников данных. однако необходимо предоставить соответствующий обработчик событий с реализацией для этих операций.

Поскольку элемент управления FormView использует шаблоны, он не предоставляет способа автоматического создания кнопок для выполнения операций обновления, удаления или вставки. Эти кнопки необходимо вручную включить в соответствующий шаблон. Элемент управления FormView распознает определенные кнопки, свойства CommandName которых имеют определенные значения. В следующей таблице перечислены кнопки команд, распознаваемые элементом управления FormView.

Button Значение commandname Описание
Отменить "Отмена" Используется в операциях обновления или вставки для отмены операции и отмены значений, введенных пользователем. Затем элемент управления FormView возвращается в режим, заданный свойством DefaultMode.
DELETE "Удалить" Используется в операциях удаления отображаемой записи из источника данных. Вызывает события ItemDeleting и ItemDeleted.
Изменить "Изменить" Используется в операциях обновления для передачи элемента управления FormView в режим редактирования. Содержимое, указанное в свойстве EditItemTemplate , отображается для строки данных.
Атрибут Insert "Вставка" Используется в операциях вставки для попытки вставки новой записи в источник данных с использованием значений, предоставленных пользователем. Вызывает события ItemInserting и ItemInserted.
Создать "Создать" Используется в операциях вставки для вывода элемента управления FormView в режим вставки. Для строки данных отображается содержимое, указанное в свойстве InsertItemTemplate .
Страница "Страница" Используется в операциях разбиения на страницы для представления кнопки в строке пейджера, которая выполняет разбиение по страницам. Чтобы указать операцию разбиения на страницы, задайте для свойства CommandArgument кнопки значение "Далее", "Prev", "First", "Last" или индекс страницы, на которую нужно перейти. Вызывает события PageIndexChanging и PageIndexChanged.
Update "Обновить" Используется в операциях обновления, чтобы попытаться обновить отображаемую запись в источнике данных значениями, предоставленными пользователем. Вызывает события ItemUpdating и ItemUpdated.

В отличие от кнопки Удалить (которая немедленно удаляет отображаемую запись), при нажатии кнопки Изменить или Создать элемент управления FormView переходит в режим редактирования или вставки соответственно. В режиме редактирования содержимое, содержащееся в свойстве EditItemTemplate , отображается для текущего элемента данных. Как правило, шаблон элемента редактирования определяется таким образом, что кнопка Изменить заменяется кнопками "Обновить" и "Отмена". Элементы управления вводом, соответствующие типу данных поля (например, Элемент управления TextBox или CheckBox), также обычно отображаются со значением поля, которое пользователь может изменить. Нажатие кнопки Обновить обновляет запись в источнике данных, а нажатие кнопки Отмена отменяет любые изменения.

Аналогичным образом содержимое, содержащееся в свойстве InsertItemTemplate , отображается для элемента данных, когда элемент управления находится в режиме вставки. Шаблон элемента вставки обычно определяется таким образом, что кнопка "Создать" заменяется кнопками "Вставка" и "Отмена", а также отображаются пустые элементы управления вводом, чтобы пользователь ввел значения для новой записи. Нажатие кнопки Вставка вставляет запись в источник данных, а нажатие кнопки Отмена отменяет любые изменения.

Элемент управления FormView предоставляет функцию разбиения по страницам, которая позволяет пользователю переходить к другим записям в источнике данных. Если этот параметр включен, строка страничного навиджа отображается в элементе управления FormView, который содержит элементы управления навигацией по страницам. Чтобы включить разбиение по страницам, присвойте свойству AllowPaging значение true. Вы можете настроить строку страничного навиджа, задав свойства объектов, содержащихся в pagerStyle и свойстве PagerSettings. Вместо использования встроенного пользовательского интерфейса строки пейджера можно создать собственный пользовательский интерфейс с помощью свойства PagerTemplate .

Настройка внешнего вида FormView

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

Свойство Style Описание
EditRowStyle Параметры стиля для строки данных, когда элемент управления FormView находится в режиме редактирования.
EmptyDataRowStyle Параметры стиля для пустой строки данных, отображаемой в элементе управления FormView, если источник данных не содержит записей.
FooterStyle Параметры стиля для строки нижнего колонтитула элемента управления FormView.
HeaderStyle Параметры стиля для строки заголовка элемента управления FormView.
InsertRowStyle Параметры стиля для строки данных, когда элемент управления FormView находится в режиме вставки.
PagerStyle Параметры стиля для строки пейджера, отображаемые в элементе управления FormView при включенной функции разбиения по страницам.
RowStyle Параметры стиля для строки данных, когда элемент управления FormView находится в режиме только для чтения.

События FormView

Элемент управления FormView предоставляет несколько событий, которые можно запрограммирования. Это позволяет запускать пользовательскую подпрограмму при каждом возникновении события. В следующей таблице перечислены события, поддерживаемые элементом управления FormView.

Событие Описание
Itemcommand Происходит при нажатии кнопки в элементе управления FormView. Это событие часто используется для выполнения задачи при нажатии кнопки в элементе управления .
ItemCreated Происходит после создания всех объектов FormViewRow в элементе управления FormView. Это событие часто используется для изменения значений записи перед ее отображением.
ItemDeleted Происходит при нажатии кнопки Удалить (кнопка со свойством CommandName , для которой задано значение "Удалить"), но после того, как элемент управления FormView удаляет запись из источника данных. Это событие часто используется для проверка результатов операции удаления.
Удаление элемента Происходит при нажатии кнопки Удалить, но до того, как элемент управления FormView удалит запись из источника данных. Это событие часто используется для отмены операции удаления.
ItemInserted Происходит при нажатии кнопки Вставка (кнопка со свойством CommandName , для которой задано значение "Вставить"), но после того, как элемент управления FormView вставляет запись. Это событие часто используется для проверка результатов операции вставки.
ItemInserting Происходит при нажатии кнопки Вставка, но до того, как элемент управления FormView вставляет запись. Это событие часто используется для отмены операции вставки.
ItemUpdated Происходит при нажатии кнопки Обновить (кнопки со свойством CommandName , для которой задано значение "Обновить"), но после того, как элемент управления FormView обновит строку. Это событие часто используется для проверка результатов операции обновления.
ItemUpdating Происходит при нажатии кнопки Обновить, но до того, как элемент управления FormView обновит запись. Это событие часто используется для отмены операции обновления.
ModeChanged Происходит после изменения режима элемента управления FormView (для редактирования, вставки или режима только для чтения). Это событие часто используется для выполнения задачи, когда элемент управления FormView изменяет режимы.
ModeChanging Происходит до того, как элемент управления FormView изменит режимы (для редактирования, вставки или только для чтения). Это событие часто используется для отмены изменения режима.
PageIndexChanged Происходит при нажатии одной из кнопок пейджера, но после того, как элемент управления FormView обработает операцию разбиения по страницам. Это событие обычно используется, когда необходимо выполнить задачу после перехода пользователя к другой записи в элементе управления .
PageIndexChanging Происходит при нажатии одной из кнопок пейджера, но до того, как элемент управления FormView обработает операцию разбиения по страницам. Это событие часто используется для отмены операции разбиения по страницам.

Detailsview

Элемент управления DetailsView используется для отображения одной записи из источника данных в таблице, где каждое поле записи отображается в строке таблицы. Его можно использовать в сочетании с элементом управления GridView для сценариев master детализации. Элемент управления DetailsView поддерживает следующие функции:

  • Привязка к элементам управления источником данных, например SqlDataSource.
  • Встроенные возможности вставки.
  • Встроенные возможности обновления и удаления.
  • Встроенные возможности разбиения по страницам.
  • Программный доступ к объектной модели DetailsView для динамической настройки свойств, обработки событий и т. д.
  • Настраиваемый внешний вид с помощью тем и стилей.

Поля строк

Каждая строка данных в элементе управления DetailsView создается путем объявления поля. Различные типы строковых полей определяют поведение строк в элементе управления . Элементы управления поля являются производными от DataControlField. В следующей таблице перечислены различные типы полей строк, которые можно использовать.

Тип поля столбца Описание
BoundField Отображает значение поля в источнике данных в виде текста.
ButtonField Отображает кнопку команды в элементе управления DetailsView. Это позволяет отображать строку с пользовательским элементом управления кнопкой, например кнопкой "Добавить" или "Удалить".
CheckBoxField Отображает поле проверка в элементе управления DetailsView. Этот тип поля строки обычно используется для отображения полей с логическим значением.
CommandField Отображает встроенные кнопки команд для выполнения операций редактирования, вставки или удаления в элементе управления DetailsView.
HyperLinkField Отображает значение поля в источнике данных в виде гиперссылки. Этот тип поля строки позволяет привязать второе поле к URL-адресу гиперссылки.
ImageField Отображает изображение в элементе управления DetailsView.
TemplateField Отображает пользовательское содержимое для строки в элементе управления DetailsView в соответствии с указанным шаблоном. Этот тип поля строки позволяет создать настраиваемое поле строки.

По умолчанию свойству AutoGenerateRows присвоено значение true, что автоматически создает объект поля привязанной строки для каждого поля привязываемого типа в источнике данных. Допустимые привязываемые типы: String, DateTime, Decimal, Guid и набор примитивных типов. Затем каждое поле отображается в строке в виде текста в порядке, в котором каждое поле отображается в источнике данных.

Автоматическое создание строк обеспечивает быстрый и простой способ отображения каждого поля в записи. Однако для использования расширенных возможностей элемента управления DetailsView необходимо явно объявить поля строк для включения в элемент управления DetailsView. Чтобы объявить поля строк, сначала задайте для свойства AutoGenerateRowsзначение false. Затем добавьте открывающие и закрывающие <теги Полей> между открывающим и закрывающим тегами элемента управления DetailsView. Наконец, выведите список полей строк, которые необходимо включить между открывающими и закрывающими <тегами Fields> . Указанные поля строк добавляются в коллекцию Fields в указанном порядке. Коллекция Fields позволяет программно управлять полями строк в элементе управления DetailsView.

Примечание

Автоматически созданные поля строк не добавляются в коллекцию Fields.

Привязка к данным с помощью DetailsView

Элемент управления DetailsView можно привязать к элементу управления источником данных, например SqlDataSource или AccessDataSource, или к любому источнику данных, реализующим интерфейс System.Collections.IEnumerable, например System.Data.DataView, System.Collections.ArrayList и System.Collections.Hashtable.

Используйте один из следующих методов для привязки элемента управления DetailsView к соответствующему типу источника данных:

  • Чтобы выполнить привязку к элементу управления источником данных, задайте для свойства DataSourceID элемента управления DetailsView значение идентификатора элемента управления источником данных. Элемент управления DetailsView автоматически привязывается к указанному элементу управления источником данных. Это предпочтительный метод привязки к данным.
  • Чтобы выполнить привязку к источнику данных, который реализует интерфейс System.Collections.IEnumerable , программно задайте свойство DataSource элемента управления DetailsView для источника данных, а затем вызовите метод DataBind.

Безопасность

Этот элемент управления можно использовать для отображения введенных пользователем данных, которые могут включать вредоносный клиентский скрипт. Перед отображением в приложении проверьте все сведения, отправляемые клиентом для исполняемого скрипта, инструкций SQL или другого кода. ASP.NET предоставляет функцию проверки входных запросов для блокировки скрипта и HTML в вводе пользователем.

Операции с данными в DetailsView

Элемент управления DetailsView предоставляет встроенные возможности, позволяющие пользователю обновлять, удалять, вставлять и перестраивать элементы в элементе управления. Когда элемент управления DetailsView привязан к элементу управления источником данных, элемент управления DetailsView может воспользоваться преимуществами возможностей элемента управления источником данных и обеспечить автоматическое обновление, удаление, вставку и разбиение по страницам.

Элемент управления DetailsView может обеспечить поддержку операций обновления, удаления, вставки и разбиения по страницам с другими типами источников данных. однако необходимо предоставить реализацию этих операций в соответствующем обработчике событий.

Элемент управления DetailsView может автоматически добавить поле строки CommandField с кнопкой Изменить, Удалить или Создать, установив для свойств AutoGenerateEditButton, AutoGenerateDeleteButton или AutoGenerateInsertButton соответственно. В отличие от кнопки Удалить (которая немедленно удаляет выбранную запись), при нажатии кнопки Изменить или Создать элемент управления DetailsView переходит в режим редактирования или вставки соответственно. В режиме редактирования кнопка Изменить заменяется кнопками Обновить и Отмена. Элементы управления ввода, соответствующие типу данных поля (например, Элемент управления TextBox или CheckBox), отображаются со значением поля, которое пользователь может изменить. Нажатие кнопки Обновить обновляет запись в источнике данных, а нажатие кнопки Отмена отменяет любые изменения. Аналогичным образом, в режиме вставки кнопка Создать заменяется кнопками Вставка и Отмена, а для ввода значений новой записи отображаются пустые элементы управления вводом.

Элемент управления DetailsView предоставляет функцию разбиения на страницы, которая позволяет пользователю переходить к другим записям в источнике данных. Если этот параметр включен, элементы управления навигацией по страницам отображаются в строке пейджера. Чтобы включить разбиение по страницам, задайте для свойства AllowPaging значение true. Строку пейджера можно настроить с помощью свойств PagerStyle и PagerSettings.

Настройка внешнего вида DetailsView

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

Свойство Style Описание
AlternatingRowStyle Параметры стиля для чередующихся строк данных в элементе управления DetailsView. Если это свойство задано, строки данных отображаются попеременно между параметрами RowStyle и AlternatingRowStyle .
CommandRowStyle Параметры стиля для строки, содержащей встроенные кнопки команд в элементе управления DetailsView.
EditRowStyle Параметры стиля для строк данных, когда элемент управления DetailsView находится в режиме редактирования.
EmptyDataRowStyle Параметры стиля для пустой строки данных, отображаемой в элементе управления DetailsView, если источник данных не содержит записей.
Нижний колонтитул Параметры стиля для строки нижнего колонтитула элемента управления DetailsView.
HeaderStyle Параметры стиля для строки заголовка элемента управления DetailsView.
InsertRowStyle Параметры стиля для строк данных, когда элемент управления DetailsView находится в режиме вставки.
PagerStyle Параметры стиля для строки пейджера элемента управления DetailsView.
RowStyle Параметры стиля для строк данных в элементе управления DetailsView. Если свойство AlternatingRowStyle также задано, строки данных отображаются попеременно между параметрами RowStyle и AlternatingRowStyle .
FieldHeaderStyle Параметры стиля для столбца заголовка элемента управления DetailsView.

События в DetailsView

Элемент управления DetailsView предоставляет несколько событий, которые можно запрограммирования. Это позволяет запускать пользовательскую подпрограмму при каждом возникновении события. В следующей таблице перечислены события, поддерживаемые элементом управления DetailsView. Элемент управления DetailsView также наследует эти события от своих базовых классов: DataBinding, DataBound, Disposed, Init, Load, PreRender и Render.

Событие Описание
Itemcommand Происходит при нажатии кнопки в элементе управления DetailsView.
ItemCreated Происходит после создания всех объектов DetailsViewRow в элементе управления DetailsView. Это событие часто используется для изменения значений записи перед ее отображением.
ItemDeleted Происходит при нажатии кнопки Удалить, но после того, как элемент управления DetailsView удаляет запись из источника данных. Это событие часто используется для проверка результатов операции удаления.
Удаление элемента Происходит при нажатии кнопки Удалить, но до того, как элемент управления DetailsView удаляет запись из источника данных. Это событие часто используется для отмены операции удаления.
ItemInserted Происходит при нажатии кнопки Вставка, но после того, как элемент управления DetailsView вставляет запись. Это событие часто используется для проверка результатов операции вставки.
ItemInserting Происходит при нажатии кнопки Вставка, но до того, как элемент управления DetailsView вставляет запись. Это событие часто используется для отмены операции вставки.
ItemUpdated Происходит при нажатии кнопки Обновить, но после обновления строки элементом управления DetailsView. Это событие часто используется для проверка результатов операции обновления.
ItemUpdating Происходит при нажатии кнопки Обновить, но до того, как элемент управления DetailsView обновит запись. Это событие часто используется для отмены операции обновления.
ModeChanged Происходит после изменения режима элемента управления DetailsView (редактирование, вставка или режим только для чтения). Это событие часто используется для выполнения задачи, когда элемент управления DetailsView изменяет режимы.
ModeChanging Происходит перед изменением режимов элемента управления DetailsView (редактирование, вставка или режим только для чтения). Это событие часто используется для отмены изменения режима.
PageIndexChanged Происходит при нажатии одной из кнопок пейджера, но после того, как элемент управления DetailsView обработает операцию разбиения по страницам. Это событие обычно используется, когда необходимо выполнить задачу после перехода пользователя к другой записи в элементе управления .
PageIndexChanging Происходит при нажатии одной из кнопок пейджера, но до того, как элемент управления DetailsView обработает операцию разбиения по страницам. Это событие часто используется для отмены операции разбиения по страницам.

Элемент управления "Меню"

Элемент управления Меню в ASP.NET 2.0 предназначен для полнофункциональный навигационной системы. Он может легко выполнять передачу данных к иерархическим источникам данных, таким как SiteMapDataSource.

Структура элементов управления Меню может быть определена декларативно или динамически и состоит из одного корневого узла и любого количества вложенных узлов. Следующий код декларативно определяет меню для элемента управления Меню.

<asp:menu id="NavigationMenu" disappearafter="2000" staticdisplaylevels="2" staticsubmenuindent="10" orientation="Vertical" font-names="Arial" target="_blank" runat="server"> <staticmenuitemstyle backcolor="LightSteelBlue" forecolor="Black"/> <statichoverstyle backcolor="LightSkyBlue"/> <dynamicmenuitemstyle backcolor="Black" forecolor="Silver"/> <dynamichoverstyle backcolor="LightSkyBlue" forecolor="Black"/> <items> <asp:menuitem navigateurl="Home.aspx" text="Home" tooltip="Home"> <asp:menuitem navigateurl="Music.aspx" text="Music" tooltip="Music"> <asp:menuitem navigateurl="Classical.aspx" text="Classical" tooltip="Classical"/> <asp:menuitem navigateurl="Rock.aspx" text="Rock" tooltip="Rock"/> <asp:menuitem navigateurl="Jazz.aspx" text="Jazz" tooltip="Jazz"/> </asp:menuitem> <asp:menuitem navigateurl="Movies.aspx" text="Movies" tooltip="Movies"> <asp:menuitem navigateurl="Action.aspx" text="Action" tooltip="Action"/> <asp:menuitem navigateurl="Drama.aspx" text="Drama" tooltip="Drama"/> <asp:menuitem navigateurl="Musical.aspx" text="Musical" tooltip="Musical"/> </asp:menuitem> </asp:menuitem> </items> </asp:menu>

В приведенном выше примере узел Home.aspx является корневым узлом. Все остальные узлы вложены в корневой узел на различных уровнях.

Существует два типа меню, которые может отрисовывать элемент управления Меню; статические и динамические меню. Статические меню состоят из пунктов меню, которые всегда видны. Динамические меню состоят из пунктов меню, которые отображаются только при наведении на них указателем мыши. Клиенты часто могут путать статические меню с меню, определенными декларативно, и динамические меню с меню, которые получают доступ к данным во время выполнения. На самом деле динамические и статические меню не связаны с методом заполнения. Термины static и dynamic относятся только к тому, отображается ли меню статически по умолчанию или только при выполнении пользователем какого-либо действия.

Свойство StaticDisplayLevels используется для настройки количества уровней меню, которые являются статическими и, следовательно, отображаются по умолчанию. В приведенном выше примере установка свойства StaticDisplayLevels значения 2 приведет к тому, что меню будет статически отображать узлы Главная, Музыка и Фильмы. Все остальные узлы будут динамически отображаться при наведении указателя мыши на родительский узел.

Свойство MaximumDynamicDisplayLevels настраивает максимальное количество динамических уровней, которые может отображать меню. Все динамические меню на уровне выше значения, указанного свойством MaximumDynamicDisplayLevels , удаляются.

Примечание

Почти наверняка вы можете столкнуться с ситуациями, когда меню не отображаются для отображения из-за свойства MaximumDynamicDisplayLevels. В таких случаях убедитесь, что свойство задано достаточно для отображения меню клиентов.

Привязка данных в элементе управления меню

Элемент управления Меню можно привязать к любому иерархическому источнику данных, например SiteMapDataSource или XMLDataSource. SiteMapDataSource является наиболее часто используемым методом привязки данных к элементу управления Меню, так как он передает данные из файла Web.sitemap и его схема предоставляет известный API для элемента управления Меню. В приведенном ниже списке показан простой файл Web.sitemap.

<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" > <siteMapNode url="~/default.aspx" description="Our Home Page" title="Home"> <siteMapNode url="~/products/default.aspx" title="Products" description="Our Products"> <siteMapNode url="~/products/winprods.aspx" title="Windows Products" description="Windows Products" /> <siteMapNode url="~/products/webprods.aspx" title="Web Products" description="Web Products" /> </siteMapNode> <siteMapNode url="~/services/default.aspx" title="Services" description="Our Services"> <siteMapNode url="~/services/consulting.aspx" title="Consulting Services" description="Consulting Services" /> <siteMapNode url="~/services/develop.aspx" title="Development Services" description="Development Services" /> </siteMapNode> </siteMapNode> </siteMap>

Обратите внимание, что существует только один корневой элемент siteMapNode, в данном случае элемент Home. Для каждого siteMapNode можно настроить несколько атрибутов. Наиболее часто используемые атрибуты:

  • Url Указывает URL-адрес, отображаемый, когда пользователь щелкает пункт меню. Если этот атрибут отсутствует, узел будет просто выполнять обратную отправку при щелчке.
  • Название Указывает текст, отображаемый в пункте меню.
  • Описание Используется в качестве документации по узлу. Кроме того, отображается в виде подсказки при наведении указателя мыши на узел.
  • siteMapFile Позволяет использовать вложенные карты сайта. Этот атрибут должен указывать на правильно сформированный ASP.NET файле карты сайта.
  • Роли Позволяет управлять внешним видом узла с помощью ASP.NET обрезки безопасности.

Обратите внимание, что, хотя все эти атрибуты являются необязательными, поведение меню может отличаться от ожидаемого, если они не указаны. Например, если атрибут URL указан, а атрибут description — нет, узел не будет виден и не будет возможности перейти по указанному URL-адресу.

Управление операцией меню

Существует несколько свойств, влияющих на работу элемента управления меню ASP.NET; Свойства Orientation , DisappearAfter , StaticItemFormatString и StaticPopoutImageUrl — это лишь некоторые из них.

  • Для параметра Orientation можно задать горизонтальное или вертикальное расположение элементов меню по горизонтали в строке или по вертикали и уложение друг на друга. Это свойство не влияет на динамические меню.
  • Свойство DisappearAfter определяет, как долго динамическое меню должно оставаться видимым после перемещения мыши от него. Значение указывается в миллисекундах и по умолчанию равно 500. Если задать для этого свойства значение -1, меню никогда не исчезнет автоматически. В этом случае меню исчезнет, только если пользователь щелкает за пределами меню.
  • Свойство StaticItemFormatString упрощает поддержание единообразия в системе меню. При указании этого свойства следует ввести вместо описания, {0} которое отображается в источнике данных. Например, чтобы пункт меню из упражнения 1 сказал Посетить страницу наших продуктов и т. д., необходимо указать Посетить нашу {0} страницу для StaticItemFormatString. Во время выполнения ASP.NET заменит любое вхождение {0} правильным описанием элемента меню.
  • Свойство StaticPopoutImageUrl указывает изображение, которое используется для указания того, что определенный узел меню имеет дочерние узлы, к которым можно получить доступ, наведя на него указатель мыши. Динамические меню будут по-прежнему использовать образ по умолчанию.

Элементы управления шаблонным меню

Элемент управления Меню — это шаблонный элемент управления, который позволяет использовать два разных элемента ItemTemplates; StaticItemTemplate и DynamicItemTemplate. С помощью этих шаблонов можно легко добавлять серверные или пользовательские элементы управления в меню.

Чтобы изменить шаблоны в Visual Studio .NET, нажмите кнопку Смарт-тег в меню и выберите изменить шаблоны. Затем можно выбрать между редактированием StaticItemTemplate или DynamicItemTemplate.

Все элементы управления, добавленные в StaticItemTemplate, будут отображаться в статическом меню при загрузке страницы. Все элементы управления, добавленные в DynamicItemTemplate, будут отображаться во всех всплывающих меню.

Элемент управления Меню имеет два уникальных события. Событие MenuItemClicked и MenuItemDatabound .

Событие MenuItemClicked возникает при щелчке элемента меню. Событие MenuItemDatabound возникает, когда элемент меню является данными. Объект MenuEventArgs, передаваемый обработчику событий, предоставляет доступ к элементу меню через свойство Item.

Управление внешним видом меню

Вы также можете повлиять на внешний вид элемента управления меню с помощью одного или нескольких стилей, доступных для форматирования меню. К ним относятся StaticMenuStyle, DynamicMenuStyle, DynamicMenuItemStyle, DynamicSelectedStyle и DynamicHoverStyle. Эти свойства настраиваются с помощью стандартной строки стиля HTML. Например, следующее повлияет на стиль динамических меню.

<DynamicMenuStyle BorderStyle="Outset" BorderWidth="1px"
    BackColor="#D6D3CE" />

Примечание

Если вы используете любой из стилей при наведении на страницу, необходимо добавить на страницу головной <> элемент с элементом runat, который имеет значение server.

Элементы управления меню также поддерживают использование тем ASP.NET 2.0.

Элемент управления TreeView

Элемент управления TreeView отображает данные в древовидной структуре. Как и в случае с элементом управления Меню, его можно легко привязать к любому иерархическому источнику данных, например SiteMapDataSource.

Первый вопрос, который клиенты, скорее всего, будут задавать об элементе управления TreeView в ASP.NET 2.0, заключается в том, связана ли он с веб-элементом Управления TreeView IE, доступным для ASP.NET 1.x. Нет. Элемент управления TreeView ASP.NET 2.0 был написан с нуля и обеспечивает значительное улучшение по сравнению с ранее доступным веб-элементом IE TreeView WebControl.

Я не буду подробно описывать, как привязать элемент управления TreeView к карте сайта, так как он выполняется точно так же, как элемент управления Меню. Однако элемент управления TreeView имеет ряд различий в способе его работы.

По умолчанию элемент управления TreeView отображается полностью развернут. Чтобы изменить уровень расширения при начальной загрузке, измените свойство ExpandDepth элемента управления . Это особенно важно в тех случаях, когда TreeView отправляет данные при расширении определенных узлов.

Привязка данных элемента управления TreeView

В отличие от элемента управления Меню, TreeView хорошо подходит для обработки больших объемов данных. Таким образом, помимо привязки данных к SiteMapDataSource или XMLDataSource, TreeView часто является данными, привязанными к DataSet или другим реляционным данным. В случаях, когда элемент управления TreeView привязан к большим объемам данных, рекомендуется привязать только к данным, которые фактически видны в элементе управления. Затем можно привязать данные к дополнительным данным при развертывании узлов TreeView.

В таких случаях свойству PopulateOnDemand объекта TreeView должно быть присвоено значение true. Затем необходимо предоставить реализацию метода TreeNodePopulate .

Привязка данных без обратной передачи

Обратите внимание, что при первом развертывании узла в предыдущем примере страница публикует и обновляется. В этом примере это не проблема, но можно предположить, что он может находиться в рабочей среде с большим объемом данных. Лучшим сценарием будет тот, в котором TreeView будет по-прежнему динамически заполнять свои узлы, но без отправки обратно на сервер.

Установив для свойств PopulateNodesFromClient и PopulateOnDemand значение true, элемент управления ASP.NET TreeView будет динамически заполнять узлы без обратной записи. При развертывании родительского узла выполняется запрос XMLHttp от клиента и запускается событие OnTreeNodePopulate. Сервер отвечает с помощью острова XML-данных, который затем используется для привязки данных дочерних узлов.

ASP.NET динамически создает клиентский код, реализующий эту функцию. Теги <скрипта> , содержащие скрипт, создаются, указывающие на AXD-файл. Например, в приведенном ниже списке показаны ссылки на скрипты для кода скрипта, который создает запрос XMLHttp.

<script src="/WebSite1/WebResource.axd?d=QQG9vSdBi4_k2y9AeP_iww2&
    amp;t=632514255396426531"
    type="text/javascript"></script>

Если вы просматриваете файл AXD выше в браузере и открываете его, вы увидите код, реализующий запрос XMLHttp. Этот метод запрещает пользователям изменять файл скрипта.

Управление операцией элемента управления TreeView

Элемент управления TreeView имеет несколько свойств, влияющих на работу элемента управления. Наиболее очевидными свойствами являются ShowCheckBoxes, ShowExpandCollapse и ShowLines.

Свойство ShowCheckBoxes влияет на то, отображаются ли на узлах поле проверка при отображении. Допустимые значения этого свойства: None, Root, Parent, Leaf и All. Они влияют на элемент управления TreeView следующим образом:

Значение свойства Действие
Нет Флажки не отображаются на узлах. Это параметр по умолчанию.
Root Флажок отображается только на корневом узле.
Parent Флажок отображается только на тех узлах, которые имеют дочерние узлы. Эти дочерние узлы могут быть родительскими или конечными узлами.
Leaf Флажок отображается только на тех узлах, у которых нет дочерних узлов.
Все Флажок отображается на всех узлах.

При использовании флажков свойство CheckedNodes возвращает коллекцию узлов TreeView, которые проверяются при обратной отправке.

Свойство ShowExpandCollapse управляет внешним видом изображения развертывания или свертывания рядом с корневым и родительским узлами. Если для этого свойства задано значение false, узлы TreeView отображаются в виде гиперссылок и разворачиваются или сворачиваются путем щелчка по ссылке.

Свойство ShowLines определяет, отображаются ли линии, соединяющие родительские узлы с дочерними узлами. При значении false (по умолчанию) строки не отображаются. Если значение равно true, элемент управления TreeView будет использовать изображения строк в папке, указанной свойством LineImagesFolder .

Чтобы настроить внешний вид строк TreeView, Visual Studio .NET 2005 включает средство Designer строк. Вы можете получить доступ к этому средству с помощью кнопки Смарт-тег в элементе управления TreeView, как показано ниже.

Снимок экрана: средство конструктора линий Visual Studio. Курсор наведите указатель мыши на выбор параметра Настроить изображения линий.

Рисунок 1

При выборе пункта меню Настроить изображения линий будет запущено средство Designer линии, позволяющее настроить внешний вид линий TreeView.

События TreeView

Элемент управления TreeView имеет следующие уникальные события:

  • SelectedNodeChanged Возникает при выборе узла на основе свойства SelectAction .
  • TreeNodeCheckChanged — происходит при изменении состояния флажков узлов.
  • TreeNodeExpanded Происходит при развертывании узла на основе свойства SelectAction .
  • TreeNodeCollapsed — происходит при сворачивании узла.
  • TreeNodeDataBound — происходит, когда узел привязан к данным.
  • TreeNodePopulate — происходит при заполнении узла.

Свойство SelectAction позволяет указать, какое событие запускается при выборе узла. Свойство SelectAction предоставляет следующие действия:

  • TreeNodeSelectAction.Expand вызывает TreeNodeExpanded при выборе узла.
  • TreeNodeSelectAction.None не вызывает никаких событий при выборе узла.
  • TreeNodeSelectAction.Select Вызывает событие SelectedNodeChanged при выборе узла.
  • TreeNodeSelectAction.SelectExpand вызывает события SelectedNodeChanged и TreeNodeExpanded при выборе узла.

Управление внешним видом с помощью TreeView

Элемент управления TreeView предоставляет множество свойств для управления внешним видом элемента управления с помощью стилей. Доступны следующие свойства:

Имя свойства Элементы управления
HoverNodeStyle Управляет стилем узлов при наведении на них указателя мыши.
LeafNodeStyle Управляет стилем конечных узлов.
NodeStyle Управляет стилем для всех узлов. Определенные стили узлов (например, LeafNodeStyle) переопределяют этот стиль.
ParentNodeStyle Управляет стилем для всех родительских узлов.
RootNodeStyle Управляет стилем корневого узла.
SelectedNodeStyle Управляет стилем для выбранного узла.

Каждое из этих свойств доступно только для чтения. Однако каждый из них возвращает объект TreeNodeStyle , и свойства этого объекта могут быть изменены с помощью формата подсвойства property-subproperty . Например, чтобы задать свойство ForeColorобъекта SelectedNodeStyle, используйте следующий синтаксис:

<asp:TreeView id=sampleTreeView
    SelectedNodeStyle-ForeColor=Blue
    runat=server>

Обратите внимание, что указанный выше тег не закрыт. Это связано с тем, что при использовании декларативного синтаксиса, показанного здесь, вы также включите узлы TreeViews в HTML-код.

Свойства стиля также можно указать в коде с помощью формата property.subproperty . Например, чтобы задать свойство ForeColorобъекта RootNodeStyle в коде, следует использовать следующий синтаксис:

treeView1.RootNodeStyle.ForeColor = System.Drawing.Color.Red;

Примечание

Полный список различных свойств стиля см. в документации MSDN по объекту TreeNodeStyle.

Элемент управления SiteMapPath

Элемент управления SiteMapPath предоставляет элемент навигации для ASP.NET разработчиков. Как и другие элементы управления навигацией, их можно легко привязать к иерархическим источникам данных, таким как SiteMapDataSource или XmlDataSource.

Элемент управления SiteMapPath состоит из объектов SiteMapNodeItem. Существует три типа узлов; Корневой узел, Родительские узлы и Текущий узел. Корневой узел — это узел в верхней части иерархической структуры. Текущий узел представляет текущую страницу. Все остальные узлы являются родительскими узлами.

Управление операцией элемента управления SiteMapPath

Ниже перечислены свойства, управляющие работой элемента управления SiteMapPath.

Свойство Описание свойства
ParentLevelsDisplayed Управляет количеством отображаемых родительских узлов. Значение по умолчанию — -1, что не накладывает ограничений на количество отображаемых родительских узлов.
PathDirection Управляет направлением SiteMapPath. Допустимые значения: RootToCurrent (по умолчанию) и CurrentToRoot.
PathSeparator Строка, управляющая символом, разделяющим узлы в элементе управления SiteMapPath. Значение по умолчанию — :.
RenderCurrentNodeAsLink Логическое значение, определяющее, отображается ли текущий узел в виде ссылки. Значение по умолчанию — False.
SkipLinkText Помогает в специальных возможностях при просмотре страницы средствами чтения с экрана. Это свойство позволяет средствам чтения с экрана пропускать элемент управления SiteMapPath. Чтобы отключить эту функцию, задайте для свойства значение String.Empty.

Элементы управления SiteMapPath в шаблоне

SiteMapControl — это шаблонный элемент управления, поэтому можно определить различные шаблоны для отображения элемента управления. Чтобы изменить шаблоны в элементе управления SiteMapPath, нажмите кнопку Смарт-тег в элементе управления и выберите в меню пункт Изменить шаблоны. Откроется меню SiteMapTasks, как показано ниже, где можно выбрать один из доступных шаблонов.

Снимок экрана: меню режима редактирования шаблона SiteMapControl. Элемент NodeTemplate выделен.

Рис. 2

Шаблон NodeTemplate ссылается на любой узел в SiteMapPath. Если узел является корневым или текущим узлом и настроен rootNodeTemplate или CurrentNodeTemplate , nodeTemplate переопределяется.

События SiteMapPath

Элемент управления SiteMapPath содержит два события, которые не являются производными от класса Control; События ItemCreated и ItemDataBound . Событие ItemCreated возникает при создании элемента SiteMapPath. ItemDataBound возникает при вызове метода DataBind во время привязки данных узла SiteMapPath. Объект SiteMapNodeItemEventArgs предоставляет доступ к определенному объекту SiteMapNodeItem через свойство Item.

Управление внешним видом с помощью SiteMapPath

Для форматирования элемента управления SiteMapPath доступны следующие стили.

Имя свойства Элементы управления
CurrentNodeStyle Управляет стилем текста для текущего узла.
RootNodeStyle Управляет стилем текста для корневого узла.
NodeStyle Управляет стилем текста для всех узлов, предполагая, что CurrentNodeStyle или RootNodeStyle не применяется.

Свойство NodeStyle переопределяется либо CurrentNodeStyle, либо RootNodeStyle. Каждое из этих свойств доступно только для чтения и возвращает объект Style . Чтобы повлиять на внешний вид узла с помощью одного из этих свойств, необходимо задать свойства возвращаемого объекта Style. Например, приведенный ниже код изменяет свойство forecolor текущего узла.

<asp:SiteMapPath runat="server" ID="SiteMapPath1"
  CurrentNodeStyle-ForeColor="Orange"/>

Свойство также можно применить программным способом следующим образом:

this.SiteMapPath1.CurrentNodeStyle.ForeColor =
    System.Drawing.Color.Orange;

Примечание

Если шаблон применен, стиль применяться не будет.

Задание 1. Настройка элемента управления меню ASP.NET

  1. Создайте новый веб-сайт.

  2. Добавьте файл карты сайта, выбрав Файл, Создать, Файл и Выбрав Карта сайта в списке шаблонов файлов.

  3. Откройте карту сайта (Web.sitemap по умолчанию) и измените ее так, чтобы она выглядела так, как показано в приведенном ниже списке. Страницы, с которыми вы связываете в файле карты сайта, на самом деле не существуют, но это не будет проблемой для этого упражнения.

    <?xml version="1.0" encoding="utf-8" ?>
    <siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
        <siteMapNode url="~/default.aspx">
            <siteMapNode url="~/products/default.aspx"
              title="Products" description="Our Products">
                <siteMapNode url="~/products/winprods.aspx"
                  title="Windows Products" description="Windows Products" />
                <siteMapNode url="~/products/webprods.aspx"
                  title="Web Products" description="Web Products" />
            </siteMapNode>
            <siteMapNode url="~/services/default.aspx"
              title="Services" description="Our Services">
                <siteMapNode url="~/services/consulting.aspx"
                  title="Consulting Services"
                  description="Consulting Services" />
                <siteMapNode url="~/services/develop.aspx"
                  title="Development Services"
                  description="Development Services" />
            </siteMapNode>
        </siteMapNode>
    </siteMap>
    
  4. Откройте веб-форму по умолчанию в режиме конструктора.

  5. В разделе Навигация панели элементов добавьте на страницу новый элемент управления Меню.

  6. В разделе Данные панели элементов добавьте новый объект SiteMapDataSource. SiteMapDataSource будет автоматически использовать файл Web.sitemap на сайте. (Файл Web.sitemap должен находиться в корневой папке сайта.)

  7. Щелкните элемент управления Меню и нажмите кнопку Смарт-тег, чтобы открыть диалоговое окно Задачи меню.

  8. В раскрывающемся списке Выбор источника данных выберите SiteMapDataSource1.

  9. Щелкните ссылку Автоформат и выберите формат меню.

  10. В области Свойства задайте для свойства StaticDisplayLevels значение 2. Теперь элемент управления Меню должен отображать узел Главная, Продукты и Службы в Designer.

  11. Перейдите на страницу в браузере, чтобы использовать меню. (Так как страницы, добавленные на карту сайта, на самом деле не существуют, вы увидите ошибку при попытке перейти к ним.)

Поэкспериментируйте с изменением свойств StaticDisplayLevels и MaximumDynamicDisplayLevels и посмотрите, как они влияют на отрисовку меню.

Задание 2. Динамическая привязка элемента управления TreeView

В этом упражнении предполагается, что SQL Server выполняется локально и что база данных Northwind присутствует в экземпляре SQL Server. Если эти условия не выполняются, измените строку подключения в примере. Обратите внимание, что также может потребоваться указать проверку подлинности SQL Server вместо доверенного подключения.

  1. Создайте новый веб-сайт.

  2. Переключитесь в представление кода для Default.aspx и замените весь код приведенным ниже кодом.

    <%@ Page Language="C#" %>
    <%@ Import Namespace="System.Data" %>
    <%@ Import Namespace="System.Data.SqlClient" %>
    
    <script runat="server">
        void PopulateNode(Object sender, TreeNodeEventArgs e) {
            // Call the appropriate method to populate a node at a particular level.
            switch (e.Node.Depth) {
                case 0:
                    // Populate the first-level nodes.
                    PopulateCategories(e.Node);
                    break;
                case 1:
                    // Populate the second-level nodes.
                    PopulateProducts(e.Node);
                    break;
                default:
                    // Do nothing.
                    break;
            }
    
        }
        void PopulateCategories(TreeNode node) {
    
            // Query for the product categories. These are the values
            // for the second-level nodes.
            DataSet ResultSet = RunQuery("Select CategoryID, CategoryName From Categories");
            // Create the second-level nodes.
            if (ResultSet.Tables.Count > 0) {
    
                // Iterate through and create a new node for each row in the query results.
                // Notice that the query results are stored in the table of the DataSet.
                foreach (DataRow row in ResultSet.Tables[0].Rows) {
    
                    // Create the new node. Notice that the CategoryId is stored in the Value property
                    // of the node. This will make querying for items in a specific category easier when
                    // the third-level nodes are created.
                    TreeNode newNode = new TreeNode();
                    newNode.Text = row["CategoryName"].ToString();
                    newNode.Value = row["CategoryID"].ToString();
                    // Set the PopulateOnDemand property to true so that the child nodes can be
                    // dynamically populated.
                    newNode.PopulateOnDemand = true;
    
                    // Set additional properties for the node.
                    newNode.SelectAction = TreeNodeSelectAction.Expand;
    
                    // Add the new node to the ChildNodes collection of the parent node.
                    node.ChildNodes.Add(newNode);
    
                }
    
            }
    
        }
        void PopulateProducts(TreeNode node) {
            // Query for the products of the current category. These are the values
            // for the third-level nodes.
            DataSet ResultSet = RunQuery("Select ProductName From Products Where CategoryID=" + node.Value);
            // Create the third-level nodes.
            if (ResultSet.Tables.Count > 0) {
    
                // Iterate through and create a new node for each row in the query results.
                // Notice that the query results are stored in the table of the DataSet.
                foreach (DataRow row in ResultSet.Tables[0].Rows) {
    
                    // Create the new node.
                    TreeNode NewNode = new TreeNode(row["ProductName"].ToString());
    
                    // Set the PopulateOnDemand property to false, because these are leaf nodes and
                    // do not need to be populated.
                    NewNode.PopulateOnDemand = false;
    
                    // Set additional properties for the node.
                    NewNode.SelectAction = TreeNodeSelectAction.None;
    
                    // Add the new node to the ChildNodes collection of the parent node.
                    node.ChildNodes.Add(NewNode);
    
                }
    
            }
        }
        DataSet RunQuery(String QueryString) {
            // Declare the connection string. This example uses Microsoft SQL Server
            // and connects to the Northwind sample database.
            String ConnectionString = "server=localhost;database=NorthWind;Integrated Security=SSPI";
            SqlConnection DBConnection = new SqlConnection(ConnectionString);
            SqlDataAdapter DBAdapter;
            DataSet ResultsDataSet = new DataSet();
            try {
                // Run the query and create a DataSet.
                DBAdapter = new SqlDataAdapter(QueryString, DBConnection);
                DBAdapter.Fill(ResultsDataSet);
                // Close the database connection.
                DBConnection.Close();
            } catch (Exception ex) {
                // Close the database connection if it is still open.
                if (DBConnection.State == ConnectionState.Open) {
                    DBConnection.Close();
                }
    
                Message.Text = "Unable to connect to the database.";
            }
            return ResultsDataSet;
        }
    </script>
    
    <html>
    <body>
        <form id="Form1" runat="server">
            <h3>
                TreeView PopulateNodesFromClient Example</h3>
            <asp:TreeView ID="LinksTreeView" 
              Font-Name="Arial" ForeColor="Blue" EnableClientScript="true"
              PopulateNodesFromClient="false" 
              OnTreeNodePopulate="PopulateNode" runat="server"
                ExpandDepth="0">
                <Nodes>
                    <asp:TreeNode Text="Inventory" SelectAction="Expand"
                                  PopulateOnDemand="True" Value="Inventory" />
                </Nodes>
            </asp:TreeView>
            <br>
            <br>
            <asp:Label ID="Message" runat="server" />
        </form>
    </body>
    </html>
    
  3. Сохраните страницу как treeview.aspx.

  4. Просмотрите страницу.

  5. При первом отображении страницы просмотрите ее источник в браузере. Обратите внимание, что клиенту были отправлены только видимые узлы.

  6. Щелкните знак "плюс" рядом с любым узлом.

  7. Снова просмотрите источник на странице. Обратите внимание, что новые отображаемые узлы теперь присутствуют.

Лабораторная работа 3. Просмотр и редактирование данных с помощью GridView и DetailsView

  1. Создайте новый веб-сайт.

  2. Добавление нового web.config на веб-сайт.

  3. Добавьте строку подключения в файл web.config, как показано ниже:

    <connectionStrings>
        <add name="Northwind"
             providerName="System.Data.SqlClient"
             connectionString="Data Source=localhost;Integrated Security=SSPI;
             Initial Catalog=Northwind;"/>
    </connectionStrings>
    

    Примечание

    Может потребоваться изменить строку подключения в зависимости от среды.

  4. Сохраните изменения и закройте файл web.config.

  5. Откройте Файл Default.aspx и добавьте новый элемент управления SqlDataSource.

  6. Измените идентификатор элемента управления SqlDataSource на Products.

  7. В меню Задачи SqlDataSource щелкните Настройка источника данных.

  8. Выберите Northwind в раскрывающемся списке подключения и нажмите кнопку Далее.

  9. Выберите Продукты в раскрывающемся списке Имя и проверка флажки ProductID, ProductName, UnitPrice и UnitsInStock, как показано ниже.

Снимок экрана: настройка продуктов источника данных.

Рис. 3

  1. Щелкните Далее.
  2. Нажмите кнопку Готово.
  3. Перейдите в представление "Источник" и изучите созданный код. Обратите внимание на элементы управления SelectCommand, DeleteCommand, InsertCommand и UpdateCommand , которые были добавлены в элемент управления SqlDataSource. Также обратите внимание на добавленные параметры.
  4. Переключитесь в конструктор и добавьте новый элемент управления GridView на страницу.
  5. Выберите Продукты в раскрывающемся списке Выбор источника данных .
  6. Установите флажки Включить разбиение по страницам и Включить выделение , как показано ниже.

Снимок экрана: меню

Рис. 4

  1. Щелкните ссылку Изменить столбцы и убедитесь, что установлен флажок Автоматически создавать поля .
  2. Нажмите кнопку ОК.
  3. Выбрав элемент управления GridView, нажмите кнопку рядом со свойством DataKeyNames в области Свойства.
  4. Выберите ProductID в списке Доступные поля данных и нажмите кнопку > , чтобы добавить его.
  5. Щелкните ОК.
  6. Добавьте на страницу новый элемент управления SqlDataSource.
  7. Измените идентификатор элемента управления SqlDataSource на Details.
  8. В меню Задачи SqlDataSource выберите Настройка источника данных.
  9. Выберите Северный ветер в раскрывающемся списке и нажмите кнопку Далее.
  10. Выберите Продукты в раскрывающемся списке Имя и проверка <флажок /strong>* в списке Столбцы.
  11. Нажмите кнопку ГДЕ .
  12. Выберите ProductID в раскрывающемся списке Столбец .
  13. Выберите = в раскрывающемся списке Оператор.
  14. Выберите Элемент Управления в раскрывающемся списке Источник .
  15. Выберите GridView1 в раскрывающемся списке Идентификатор элемента управления .
  16. Нажмите кнопку Добавить , чтобы добавить предложение WHERE.
  17. Нажмите кнопку ОК.
  18. Нажмите кнопку Дополнительно и проверка флажок Создать инструкции INSERT, UPDATE и DELETE.
  19. Нажмите кнопку ОК.
  20. Нажмите кнопку Далее и нажмите кнопку Готово.
  21. Добавьте элемент управления DetailsView на страницу.
  22. В раскрывающемся списке Выбор источника данных выберите Сведения.
  23. Установите флажок Включить редактирование , как показано ниже.

Снимок экрана: меню

Рис. 5 39. Сохраните страницу и перейдите на страницу Default.aspx. 40. Щелкните ссылку Выбрать рядом с различными записями, чтобы увидеть автоматическое обновление DetailsView. 41. Щелкните ссылку Изменить в элементе управления DetailsView. 42. Внесите изменения в запись и нажмите кнопку Обновить.