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


Использование TemplateField в элементе управления GridView (C#)

Скотт Митчелл

Скачать в формате PDF

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

Введение

GridView состоит из набора полей, указывающих, что свойства из DataSource должны быть включены в конечный выходной результат, а также способ, которым будут отображаться данные. Самый простой тип поля — BoundField, который отображает значение данных в виде текста. Другие типы полей отображают данные с помощью альтернативных ЭЛЕМЕНТОВ HTML. CheckBoxField, например, отображается как флажок, состояние которого зависит от значения указанного поля данных; ImageField отображает изображение, источник изображения которого основан на указанном поле данных. Гиперссылки и кнопки, состояние которых зависит от базового значения поля данных, можно отобразить с помощью типов полей HyperLinkField и ButtonField.

Хотя типы полей CheckBoxField, ImageField, HyperLinkField и ButtonField позволяют альтернативному представлению данных, они по-прежнему довольно ограничены в отношении форматирования. CheckBoxField может отображать только один флажок, в то время как ImageField может отображать только одно изображение. Что делать, если определенное поле должно отображать текст, флажок и изображение на основе разных значений полей данных? Или если бы мы хотели отобразить данные с помощью веб-элемента управления, отличного от checkBox, Image, HyperLink или Button? Кроме того, BoundField ограничивает его отображение одним полем данных. Что делать, если нужно отобразить два или более значений поля данных в одном столбце GridView?

GridView предлагает TemplateField для достижения требуемого уровня гибкости, который визуализируется с помощью шаблона. Шаблон может включать сочетание статических HTML, веб-элементов управления и синтаксиса привязки данных. Кроме того, в TemplateField есть множество шаблонов, которые можно использовать для настройки отрисовки для различных ситуаций. Например, ItemTemplate используется по умолчанию для отрисовки ячейки каждой строки, однако шаблон EditItemTemplate можно использовать для настройки интерфейса при редактировании данных.

В этом руководстве мы рассмотрим, как использовать TemplateField для достижения большей степени настройки с помощью элемента управления GridView. В предыдущем руководстве мы узнали, как настроить форматирование на основе базовых данных с помощью DataBound и RowDataBound обработчиков событий. Другим способом настройки форматирования на основе базовых данных является вызов методов форматирования из шаблона. Мы рассмотрим этот метод в этом руководстве.

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

Три поля шаблона используются для настройки отображения

Рис. 1. Три templateFields используются для настройки отображения (щелкните, чтобы просмотреть изображение полного размера)

Шаг 1. Привязка данных к GridView

В сценариях создания отчетов, где необходимо использовать TemplateFields для настройки внешнего вида, проще всего начать с создания элемента управления GridView, содержащего только BoundFields, а затем добавить новые templateFields или преобразовать существующие BoundFields в TemplateFields по мере необходимости. Давайте начнем этот курс, добавив GridView на страницу через Designer и привязав его к ObjectDataSource, который возвращает список сотрудников. Эти шаги создадут GridView с BoundFields (связанными полями) для каждого из полей сотрудника.

Откройте страницу GridViewTemplateField.aspx и перетащите элемент GridView из панели элементов на конструктор. В меню смарт-тега GridView выберите пункт "Добавить новый элемент управления ObjectDataSource", который вызывает метод класса EmployeesBLLGetEmployees().

Добавление нового элемента управления ObjectDataSource, вызывающего метод GetEmployees()

Рис. 2. Добавление нового элемента управления ObjectDataSource, вызывающего GetEmployees() метод (щелкните, чтобы просмотреть изображение полного размера)

Привязка GridView таким образом автоматически добавит BoundField для каждого свойства сотрудника: EmployeeID, LastName, FirstName, Title, HireDate, ReportsTo и Country. Для этого отчета не будем утруждать себя отображением свойств EmployeeID, ReportsTo или Country. Чтобы удалить эти boundFields, можно:

  • Щелкните на ссылке "Изменить столбцы" в смарт-теге GridView, чтобы открыть диалоговое окно "Поля". Затем выберите BoundFields в левом нижнем списке и нажмите красную кнопку X, чтобы удалить BoundField.
  • Измените декларативный синтаксис GridView вручную из представления "Исходный код", удалите элемент <asp:BoundField> для BoundField, который вы хотите удалить.

После того, как вы удалите EmployeeID, ReportsTo, и Country BoundFields, разметка вашего GridView должна выглядеть следующим образом:

<asp:GridView ID="GridView1" runat="server"
    AutoGenerateColumns="False" DataKeyNames="EmployeeID"
    DataSourceID="ObjectDataSource1">
    <Columns>
        <asp:BoundField DataField="LastName" HeaderText="LastName"
            SortExpression="LastName" />
        <asp:BoundField DataField="FirstName" HeaderText="FirstName"
            SortExpression="FirstName" />
        <asp:BoundField DataField="Title" HeaderText="Title"
            SortExpression="Title" />
        <asp:BoundField DataField="HireDate" HeaderText="HireDate"
            SortExpression="HireDate" />
    </Columns>
</asp:GridView>

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

Поля LastName, FirstName, Title и HireDate отображаются для каждого сотрудника

Рис. 3.: LastName поля, FirstName поля, Title поля и HireDate поля отображаются для каждого сотрудника (нажмите, чтобы просмотреть изображение в полном размере)

Шаг 2: Отображение имён и фамилий в одном столбце

В настоящее время имена и фамилии каждого сотрудника отображаются в отдельном столбце. Было бы лучше объединить их в один столбец. Для этого необходимо использовать TemplateField. Мы можем либо добавить новый TemplateField, вставить в него необходимую разметку и синтаксис привязки данных, а затем удалить BoundFields FirstName и LastName, либо преобразовать BoundField FirstName в TemplateField, изменить TemplateField, чтобы включить значение LastName, а затем удалить BoundField LastName.

Оба подхода дают тот же самый результат, но лично мне нравится преобразовывать BoundFields в TemplateFields, когда это возможно, так как преобразование автоматически добавляет ItemTemplate, EditItemTemplate, а также веб-элементы управления с синтаксисом привязки данных, чтобы имитировать внешний вид и функциональность BoundField. Преимущество заключается в том, что нам потребуется меньше работать с TemplateField, так как процесс преобразования будет выполнять некоторые действия для нас.

Чтобы преобразовать существующий BoundField в TemplateField, щелкните ссылку "Изменить столбцы" из смарт-тега GridView, открыв диалоговое окно "Поля". Выберите BoundField для преобразования из списка в левом нижнем углу и щелкните ссылку "Преобразовать это поле в ШаблонФилд" в правом нижнем углу.

Преобразование BoundField в TemplateField в диалоговом окне

Рис. 4. Преобразование BoundField в templateField из диалогового окна "Поля" (щелкните, чтобы просмотреть изображение полного размера)

Перейдите вперед и преобразуйте FirstName BoundField в TemplateField. После этого изменения в конструкторе нет ощутимых различий. Это связано с тем, что преобразование BoundField в TemplateField создает TemplateField, который сохраняет внешний вид и функциональность BoundField. Несмотря на отсутствие визуального различия на этом этапе в конструкторе, этот процесс преобразования заменил декларативный синтаксис BoundField — <asp:BoundField DataField="FirstName" HeaderText="FirstName" SortExpression="FirstName" /> следующим синтаксисом TemplateField:

<asp:TemplateField HeaderText="FirstName" SortExpression="FirstName">
    <EditItemTemplate>
        <asp:TextBox ID="TextBox1" runat="server"
            Text='<%# Bind("FirstName") %>'></asp:TextBox>
    </EditItemTemplate>
    <ItemTemplate>
        <asp:Label ID="Label1" runat="server"
            Text='<%# Bind("FirstName") %>'></asp:Label>
    </ItemTemplate>
</asp:TemplateField>

Как видно, TemplateField состоит из двух шаблонов ItemTemplate , у которых есть метка, свойство которой Text задано значение FirstName поля данных, и EditItemTemplate элемент управления TextBox, свойство которого Text также задано для FirstName поля данных. Синтаксис привязки данных — <%# Bind("fieldName") %> указывает, что поле fieldName данных привязано к указанному свойству веб-элемента управления.

Чтобы добавить значение поля данных LastName в этот TemplateField, необходимо добавить другой веб-контрол Label в ItemTemplate и привязать его свойство Text к LastName. Это можно сделать вручную или с помощью дизайнера. Чтобы сделать это вручную, просто добавьте соответствующий декларативный синтаксис в ItemTemplate:

<asp:TemplateField HeaderText="FirstName" SortExpression="FirstName">
    <EditItemTemplate>
        <asp:TextBox ID="TextBox1" runat="server"
            Text='<%# Bind("FirstName") %>'></asp:TextBox>
    </EditItemTemplate>
    <ItemTemplate>
        <asp:Label ID="Label1" runat="server"
            Text='<%# Bind("FirstName") %>'></asp:Label>
        <asp:Label ID="Label2" runat="server"
            Text='<%# Bind("LastName") %>'></asp:Label>
    </ItemTemplate>
</asp:TemplateField>

Чтобы добавить его через конструктор, щелкните ссылку "Изменить шаблоны" из смарт-тега GridView. Откроется интерфейс редактирования шаблона GridView. В смарт-теге этого интерфейса представлен список шаблонов в GridView. Так как на этом этапе у нас есть только один шаблон TemplateField, единственными шаблонами, перечисленными в раскрывающемся списке, являются эти шаблоны для FirstName TemplateField вместе с EmptyDataTemplate и PagerTemplate. Шаблон EmptyDataTemplate , если он указан, используется для отрисовки выходных данных GridView, если нет результатов, привязанных к GridView; PagerTemplateпри указании используется для отрисовки интерфейса разбиения страниц для GridView, поддерживающего разбиение по страницам.

Шаблоны GridView можно изменить с помощью конструктора

Рис. 5. Шаблоны GridView можно изменить с помощью конструктора (щелкните, чтобы просмотреть изображение полного размера)

Чтобы также отобразить LastName в FirstName TemplateField, перетащите Label из панели инструментов в FirstName TemplateField ItemTemplate в интерфейсе редактирования шаблона GridView.

Добавить элемент управления Label в элемент ItemTemplate поля TemplateField

Рис. 6. Добавьте элемент управления Web с меткой в FirstName ItemTemplate TemplateField (щелкните для просмотра изображения в полном размере)

На этом этапе веб-элемент управления Label, добавленный в TemplateField, имеет значение Text "Label". Необходимо изменить это, чтобы это свойство было привязано к значению LastName поля данных. Для этого щелкните смарт-тег элемента управления Label и выберите опцию "Редактировать привязки данных".

Выберите параметр

Рис. 7. Выберите параметр "Изменить DataBindings" из смарт-тега метки (щелкните, чтобы просмотреть изображение полного размера)

Откроется диалоговое окно DataBindings. Здесь можно выбрать свойство для участия в привязке данных из списка слева и выбрать поле для привязки данных из раскрывающегося списка справа. Выберите Text свойство слева и LastName поле справа, затем нажмите кнопку "ОК".

Привязка свойства text к полю данных LastName

Рис. 8. Привязка Text свойства к LastName полю данных (щелкните, чтобы просмотреть изображение полного размера)

Замечание

Диалоговое окно DataBindings позволяет указать, следует ли выполнять двустороннее связывание данных. Если этот флажок не установлен, будет использоваться синтаксис привязки данных <%# Eval("LastName")%>, вместо <%# Bind("LastName")%>. Любой подход подходит для этого руководства. Двусторонняя привязка данных становится важной при вставке и редактировании данных. Однако для простого отображения данных любой подход будет работать одинаково хорошо. Подробно рассмотрим двустороннее связывание данных в будущих руководствах.

Просмотрите эту страницу через браузер. Как вы можете видеть, GridView по-прежнему включает четыре столбца; однако столбец FirstNameтеперь отображает как FirstName, так и LastName значения полей данных.

Значения FirstName и LastName отображаются в одном столбце

Рис. 9. И FirstNameLastName значения отображаются в одном столбце (щелкните, чтобы просмотреть изображение полного размера)

Чтобы завершить этот первый шаг, удалите LastName BoundField и переименуйте свойство FirstNameHeaderText TemplateField в "Name". После этих изменений декларативная разметка GridView должна выглядеть следующим образом:

<asp:GridView ID="GridView1" runat="server"
    AutoGenerateColumns="False" DataKeyNames="EmployeeID"
    DataSourceID="ObjectDataSource1">
    <Columns>
        <asp:TemplateField HeaderText="Name" SortExpression="FirstName">
            <EditItemTemplate>
                <asp:TextBox ID="TextBox1" runat="server"
                    Text='<%# Bind("FirstName") %>'></asp:TextBox>
            </EditItemTemplate>
            <ItemTemplate>
                <asp:Label ID="Label1" runat="server"
                    Text='<%# Bind("FirstName") %>'></asp:Label>
                <asp:Label ID="Label2" runat="server"
                    Text='<%# Eval("LastName") %>'></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:BoundField DataField="Title" HeaderText="Title"
            SortExpression="Title" />
        <asp:BoundField DataField="HireDate" HeaderText="HireDate"
            SortExpression="HireDate" />
    </Columns>
</asp:GridView>

Имена и фамилии каждого сотрудника отображаются в одном столбце

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

Шаг 3. Использование элемента управления "Календарь" для отображенияHiredDateполя

Отображение значения поля данных в виде текста в GridView так же просто, как и при использовании BoundField. Однако для некоторых сценариев данные лучше всего выразить с помощью определенного веб-элемента управления вместо простого текста. Такая настройка отображения данных возможна с помощью TemplateFields. Например, вместо отображения даты найма сотрудника в виде текста можно отобразить календарь (с помощью элемента управления "Календарь") с выделенной датой найма.

Для этого начните с преобразования HiredDate BoundField в TemplateField. Просто перейдите к смарт-тегу GridView и щелкните ссылку "Изменить столбцы", открыв диалоговое окно "Поля". HiredDate Выберите BoundField и нажмите кнопку "Преобразовать это поле в TemplateField".

Преобразуйте поле HiredDate BoundField в TemplateField

Рис. 11. Преобразование HiredDate BoundField в templateField (щелкните, чтобы просмотреть изображение полного размера)

Как мы видели на шаге 2, это заменит BoundField на TemplateField, который содержит ItemTemplate и EditItemTemplate, с меткой и TextBox, свойства которого Text связаны с HiredDate значением с помощью синтаксиса привязки данных <%# Bind("HiredDate")%>.

Чтобы заменить текст элементом управления Calendar, измените шаблон, удалив метку и добавив элемент управления Calendar. В конструкторе выберите пункт "Изменить шаблоны" в смарт-теге GridView и выберите HireDate поле шаблона ItemTemplate в раскрывающемся списке. Затем удалите элемент управления Label и перетащите элемент управления Calendar из панели элементов в интерфейс редактирования шаблона.

Добавление элемента управления

Рис. 12. Добавление элемента управления календаря в HireDate шаблонФилд ItemTemplate (щелкните, чтобы просмотреть изображение полного размера)

На этом этапе в каждой строке GridView будет находиться элемент управления Calendar в поле HiredDate TemplateField. Однако фактическое HiredDate значение сотрудника не задано нигде в элементе управления "Календарь", что приводит к тому, что каждый элемент управления "Календарь" по умолчанию отображает текущий месяц и дату. Чтобы устранить эту проблему, необходимо назначить каждому сотруднику HiredDate свойства SelectedDate и VisibleDate элемента управления Calendar.

В смарт-теге элемента управления «Календарь» выберите «Редактировать привязки данных» (DataBindings). Затем привяжите оба свойства SelectedDate и VisibleDate к полю данных HiredDate.

Свяжите свойства SelectedDate и VisibleDate с полем данных

Рис. 13. Привязка SelectedDate свойств к VisibleDateHiredDate полю данных (щелкните, чтобы просмотреть изображение полного размера)

Замечание

Выбранная дата элемента управления "Календарь" не обязательно должна быть видимой. Например, календарь можетиметь 1 августа 1999 года в качестве выбранной даты, но показывать текущий месяц и год. Выбранная дата и видимая дата задаются свойствами SelectedDate и VisibleDate элемента управления "Календарь". Поскольку мы хотим выделить свойство HiredDate сотрудника и убедиться, что оно отображается, необходимо связать оба эти свойства с полем данных HireDate.

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

Дата найма сотрудника отображается в элементе управления

Рис. 14. Сотрудник HiredDate отображается в элементе управления "Календарь" (щелкните, чтобы просмотреть изображение полного размера)

Замечание

Вопреки всем примерам, которые мы видели до сих пор, в этом руководстве мы не задали EnableViewState свойство false для этого GridView. Причина этого решения заключается в том, что нажатие даты элемента управления "Календарь" приводит к обратной отправке, задание выбранной даты календаря на дату, которую только что щелкнули. Если состояние представления GridView отключено, однако при каждой обратной обратной отправке данные GridView возвращаются к базовому источнику данных, что приводит к тому , что выбранная дата календаря будет возвращена сотруднику HireDate, перезаписав дату, выбранную пользователем.

В этом руководстве данное обсуждение бессмысленно, так как пользователь не может обновить сотрудника HireDate. Скорее всего, лучше настроить элемент управления "Календарь", чтобы ее даты не были выбраны. Независимо от этого, в этом руководстве показано, что в некоторых обстоятельствах состояние представления должно быть включено для предоставления определенных функциональных возможностей.

Шаг 4. Отображение количества дней, которые сотрудник работал в компании

До сих пор мы видели два приложения TemplateFields:

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

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

Тем не менее, еще одно использование TemplateFields возникает в сценариях, когда базовые данные должны отображаться по-разному в отчете веб-страницы, чем в формате, который он хранится в базе данных. Представьте, что в таблице Employees есть поле Gender, которое хранит символ M или F, чтобы указать пол сотрудника. При отображении этих сведений на веб-странице может потребоваться показать пол как "Мужчина" или "Женщина", а не только "M" или "F".

Оба этих сценария можно обрабатывать путем создания метода форматирования в классе кода ASP.NET страницы (или в отдельной библиотеке классов, реализованной как static метод), который вызывается из шаблона. Такой метод форматирования вызывается из шаблона с использованием того же синтаксиса привязки данных, который виделся ранее. Метод форматирования может принимать любое количество параметров, но должен возвращать строку. Эта возвращаемая строка — это HTML-код, внедренный в шаблон.

Чтобы проиллюстрировать эту концепцию, давайте добавим наш учебник, чтобы показать столбец, который содержит общее количество дней, которые сотрудник был на работе. Этот метод форматирования принимает объект Northwind.EmployeesRow и возвращает количество дней, в течение которых сотрудник был на работе, в виде строки. Этот метод можно добавить в класс кодовой части страницы ASP.NET, но должен быть помечен как protected или public в целях доступа к шаблону.

protected string DisplayDaysOnJob(Northwind.EmployeesRow employee)
{
    // Make sure HiredDate is not null... if so, return "Unknown"
    if (employee.IsHireDateNull())
        return "Unknown";
    else
    {
        // Returns the number of days between the current
        // date/time and HireDate
        TimeSpan ts = DateTime.Now.Subtract(employee.HireDate);
        return ts.Days.ToString("#,##0");
    }
}

HiredDate Поскольку поле может содержать NULL значения базы данных, необходимо сначала убедиться, что значение не NULL, прежде чем продолжить вычисление. HiredDate Если значение равноNULL, мы просто возвращаем строку "Неизвестно", если это не NULLтак, вычисляем разницу между текущим временем и HiredDate значением и возвращаем количество дней.

Чтобы использовать этот метод, необходимо вызвать его из TemplateField в GridView с помощью синтаксиса привязки данных. Начните с добавления нового TemplateField в GridView, щелкнув ссылку "Изменить столбцы" в смарт-теге GridView и добавив новый TemplateField.

Добавить новое поле шаблона в GridView

Рис. 15. Добавление нового шаблона в GridView (щелкните, чтобы просмотреть изображение полного размера)

Задайте для этого нового элемента TemplateField свойству HeaderText значение "Days on the Job" и установите свойство ItemStyle для HorizontalAlign как Center. Чтобы вызвать DisplayDaysOnJob метод из шаблона, добавьте ItemTemplate и используйте следующий синтаксис привязки данных:

<%# DisplayDaysOnJob((Northwind.EmployeesRow)
     ((System.Data.DataRowView) Container.DataItem).Row) %>

Container.DataItemвозвращает DataRowView объект, соответствующий записи DataSource, привязанной к GridViewRow. Его Row свойство возвращает строго типизированный Northwind.EmployeesRow, который передается в метод DisplayDaysOnJob. Этот синтаксис привязки данных может напрямую использоваться в ItemTemplate (как это показано в синтаксисе декларативных выражений ниже) или может быть назначен свойству Text элемента управления Label для веб-сайта.

Замечание

Вместо передачи экземпляра EmployeesRow можно просто передать значение HireDate, используя <%# DisplayDaysOnJob(Eval("HireDate")) %>. Однако, метод Eval возвращает object значение, поэтому нам придется изменить сигнатуру метода DisplayDaysOnJob, чтобы принимать входной параметр типа object. Мы не можем слепо привести вызов Eval("HireDate") к DateTime, потому что столбец HireDate в таблице Employees может содержать значения NULL. Поэтому нам нужно принять входной object параметр для DisplayDaysOnJob метода, проверить, имеет ли он значение базы данных NULL (которое можно выполнить с помощью Convert.IsDBNull(objectToCheck)), а затем продолжить соответствующим образом.

Из-за этих тонкостей я решил пройти весь EmployeesRow инстанс. В следующем руководстве мы увидим более подходящий пример использования Eval("columnName") синтаксиса для передачи входного параметра в метод форматирования.

Ниже показан декларативный синтаксис для GridView после добавления TemplateField и вызова метода DisplayDaysOnJob из ItemTemplate.

<asp:GridView ID="GridView1" runat="server"
    AutoGenerateColumns="False" DataKeyNames="EmployeeID"
    DataSourceID="ObjectDataSource1">
    <Columns>
        <asp:TemplateField HeaderText="Name" SortExpression="FirstName">
            <EditItemTemplate>
                <asp:TextBox ID="TextBox1" runat="server"
                    Text='<%# Bind("FirstName") %>'></asp:TextBox>
            </EditItemTemplate>
            <ItemTemplate>
                <asp:Label ID="Label1" runat="server"
                    Text='<%# Bind("FirstName") %>'></asp:Label>
                <asp:Label ID="Label2" runat="server"
                    Text='<%# Eval("LastName") %>'></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:BoundField DataField="Title" HeaderText="Title"
            SortExpression="Title" />
        <asp:TemplateField HeaderText="HireDate"
            SortExpression="HireDate">
            <EditItemTemplate>
                <asp:TextBox ID="TextBox2" runat="server"
                    Text='<%# Bind("HireDate") %>'></asp:TextBox>
            </EditItemTemplate>
            <ItemTemplate>
                <asp:Calendar ID="Calendar1" runat="server"
                    SelectedDate='<%# Bind("HireDate") %>'
                    VisibleDate='<%# Eval("HireDate") %>'>
            </asp:Calendar>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Days On The Job">
            <ItemTemplate>
                <%# DisplayDaysOnJob((Northwind.EmployeesRow)
                    ((System.Data.DataRowView) Container.DataItem).Row) %>
            </ItemTemplate>
            <ItemStyle HorizontalAlign="Center" />
        </asp:TemplateField>
    </Columns>
</asp:GridView>

На рисунке 16 показан завершенный учебник при просмотре через браузер.

Число дней, в течение которых сотрудник был на задании, отображается

Рис. 16. Количество дней, которые сотрудник был на задании отображается (щелкните, чтобы просмотреть изображение полного размера)

Сводка

ШаблонноеПоле в элементе управления GridView обеспечивает более высокую степень гибкости отображения данных, чем доступно для других полей управления. TemplateFields идеально подходит для ситуаций, когда:

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

Помимо настройки отображения данных, TemplateFields также используются для настройки пользовательских интерфейсов, используемых для редактирования и вставки данных, как мы увидим в будущих руководствах.

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

Счастливое программирование!

Сведения о авторе

Скотт Митчелл, автор семи книг ASP/ASP.NET и основатель 4GuysFromRolla.com, работает с технологиями Microsoft Web с 1998 года. Скотт работает независимым консультантом, тренером и писателем. Его последняя книга — Sams Teach Yourself ASP.NET 2.0 за 24 часа. С ним можно связаться по адресу mitchell@4GuysFromRolla.com.

Особое спасибо кому

Эта серия учебников была проверена многими полезными рецензентами. Ведущий рецензент этого руководства — Дэн Джагерс. Хотите просмотреть мои предстоящие статьи MSDN? Если да, напишите мне на mitchell@4GuysFromRolla.com.