Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lektsii_CSharp_5.docx
Скачиваний:
38
Добавлен:
11.05.2015
Размер:
472.96 Кб
Скачать

5.17. ОтоБражение отдельных записей

В ASP.NET 2.0 появились два новых элемента управления, предназначенных для вывода информации из источника данных не в виде строк таблицы, а в виде отдельных записей. Это элементы управления DetailsView и FormView.

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

Хотя элемент управления DetailsView обычно используется для модификации и вставки записей, он не проверяет, соответствуют ли введенные данные схеме их источника. Не предоставляет он и элементов пользовательского интерфейса, определяемых схемой данных (например, раскрывающегося списка для выбора значений внешнего ключа или специализированных шаблонов для редактирования данных определенных типов).

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

<asp:DetailsView ID="detailsView" runat="server"

DataSourceID="SqlDS" HeaderText="Performers">

</asp:DetailsView>

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

На тот случай, если источник данных окажется пустым, можно задать шаблон EmptyDataTemplate, чтобы вывод элемента управления был более дружественным пользователю:

<asp:DetailsView ID="detailsView" runat="server"

DataSourceID="SqlDS" HeaderText="Performers">

<EmptyDataTemplate>

<asp:Label ID="lblEmpty" runat="server">

There's no data to show in this view.

</asp:Label>

</EmptyDataTemplate>

</asp:DetailsView>

Когда свойство AllowPaging установлено в true, элемент DetailsView выводит блок листания, позволяющий пользователю переходить от записи к записи. Механизм листания элемента управления DetailsView использует свойство PageIndex, в котором содержится индекс текущей записи источника данных. Когда пользователь щелкает ту или иную навигационную кнопку, значение свойства PageIndex изменяется, элемент управления повторяет операцию связывания с данными и обновляет свой пользовательский интерфейс. Общее число записей в источнике данных возвращает свойство PageCount. Переход к другой записи сопровождается парой событий: PageIndexChanging и PageIndexChanged.

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

Элементы управления, подобные DetailsView, особенно полезны в тех случаях, когда основной работой пользователя является обновление, удаление и добавление данных. На командной панели элемента управления DetailsView имеются все необходимые для этого кнопки. Вы даете элементу указание создать эти кнопки, устанавливая в true свойства AutoGenerateEditButton, AutoGenerateDeleteButton и AutoGenerateInsertButton. Как и в случае с элементом управления GridView, все операции с данными DetailsView осуществляет связанный с ним компонент, представляющий источник данных. Для этого компонента нужно определить необходимые команды, а также задать в свойстве DataKeyNames ключ, идентифицирующий текущую запись.

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

<asp:TemplateField HeaderText="Country">

<ItemTemplate>

<asp:Literal runat="server" Text='<%# Eval("country")%>'/>

</ItemTemplate>

<EditItemTemplate>

<asp:DropDownList ID="ddlCountries" runat="server"

DataSourceID="CountriesDS"

SelectedValue='<%# Bind("country")%>'/>

</EditItemTemplate>

</asp:TemplateField>

Согласно этому определению содержимое поля Country в режиме просмотра выводится в литеральной форме, а в режиме редактирования ‑ в виде раскрывающегося списка. Оператор Bind(), с помощью которого получается выделенное в списке значение, подобен оператору Eval(), но отличается от него двусторонним действием ‑ он не только возвращает прочитанные из источника данные, но и записывает измененное значение в источник данных.

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

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

Таблица 31

Методы элемента управления FormView

Имя метода

Описание

ChangeMode()

Изменяет рабочий режим элемента управления; этому методу передается значение из перечисления FormViewMode, определяющее целевой режим:Readonly,EditилиInsert

DeleteItem()

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

InsertItem()

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

UpdateItem()

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

Методы InsertItem() и UpdateItem() предназначены для инициирования соответствующих операций и вызываются элементами управления текущего шаблона. Им не нужно передавать ни вставляемой записи, ни новых значений, ни ключа удаляемой записи. Элемент управления FormView сам отлично знает, как извлечь необходимую информацию (он делает это так же, как элемент управления DetailsView). Методам InsertItem() и UpdateItem() передаётся значение булева типа, указывающее, должна ли производиться проверка данных. Если оно имеет значение true, активизируются проверочные элементы управления, определенные в составе шаблона.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]