Опубликован: 07.05.2010 | Доступ: свободный | Студентов: 1676 / 62 | Оценка: 4.56 / 4.06 | Длительность: 34:11:00
Лекция 14:

Интерфейсные элементы ADO.NET

< Лекция 13 || Лекция 14 || Лекция 15 >
Аннотация: Табличный элемент управления данными GridView. Явное определение столбцов в GridView. Форматирование в GridView. Стили в GridView.

Программировать устал - перспективу потерял

Файлы к лекции Вы можете скачать здесь.

К развитым интерфейсным элементам пользователя, служащих для управления данными и их представлением, относятся GridView, DetailsView и FormView. Мы уже применяли ранее некоторые из них, но в этом разделе познакомимся с ними более подробно.

Табличный элемент управления данными GridView

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

Для обратной совместимости DataGrid оставлен в ASP.NET 2.0, хотя и убран по умолчанию из панели Toolbox. Сделать доступным элемент DataGrid можно, если выполнить для любой вкладки панели Toolbox команду контекстного меню Choose Items (добавить элементы)

Явное определение столбцов в GridView

Свойство AutoGenerateColumns элемента GridView установлено по умолчанию в состояние True. Чтобы его отключить, нужно явно указать в декларативных настройках GridView атрибут AutoGenerateColumns="False". При включенном свойстве AutoGenerateColumns элемент GridView автоматически выбирает из связанного источника данных все столбцы в том порядке, в котором их обнаруживает, и выстраивает их в таблицу с заголовками колонок, равными именам полей.

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

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

Типы столбцов, явно определяемых в GridView
Тип Описание
BoundField Основной тип, представляющий отображаемые данные поля
CheckBoxField Столбец, представленый флажками для отображения логических данных типа bit
HyperLinkField Отображает содержимое полей в форме гиперссылки
ImageField Отображает графические данные из двоичного поля
ButtonField Отображает содержимое полей в форме кнопок
CommandField Представляет управляющий столбец с кнопками редактирования
TemplateField Специфицирует отображение множественных полей, настраиваемых элементов управления и произвольного HTML, используя шаблон. Обладает наибольшей гибкостью, но требует больших усилий в настройке

Для визуальной настройки столбцов GridView предназначено диалоговое окно Fields, которое можно вызвать командой Edit Columns (Add New Column) через встроенную панель, щелкнув на кнопке с пиктограммой треугольника в правом верхнем углу отображаемого на Web-форме элемента GridView

Диалоговое окно Fields можно вызвать и по другому - щелкнуть на свойстве Columns в панели Properties.

Все действия в диалоговом окне Fields запоминаются в дескрипторном описании элемента GridView в разделе <Columns>, например

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False">
    <Columns>
        <asp:BoundField />
        <asp:CheckBoxField />
        <asp:HyperLinkField />
        <asp:ImageField>
        </asp:ImageField>
        <asp:ButtonField Text="Button" />
        <asp:CommandField />
        <asp:TemplateField></asp:TemplateField>
    </Columns>
</asp:GridView>

Коллекцией столбцов можно управлять и программно, например,

GridView1.Columns[2].Visible=true

скрывает третий столбец (нумерация с нуля). Скрытый столбец не генерирует HTML.

Если мы хотим сделать скролирующий GridView внутри Web-страницы, то должны поместить его внутрь элемента Panel и установить соответствующий размер панели и свойство Panel.ScrollBars.

Элемент GridView подстраивается под источник данных, который возвращает определенный набор столбцов. Если мы изменили источник данных так, что он стал возвращать новый набор столбцов, то команда Refresh Schema (обновить схему) встроенной панели GridView вернет его в исходное состояние (регенерирует).

Свойства BoundField
Свойство Описание
DataField Имя поля элемента данных, которое нужно отобразить в данном столбце
DataFormatString Строка форматирования, удобная для представления чисел и дат
ApplyFormatInEditMode Булев флаг включения строки форматирования
HeaderText, HeaderImageUrl, FooterText Текст заголовка, рисунок заголовка, нижний колонтитул столбца. В нижний колонтитул можно помещать вычислимое выражение
ReadOnly Замыкает столбец от режима редактирования. Применяется, как правило, к первичным ключам
InsertVisible Булев флаг управления возможностью вставки
Visible Скрывает столбец от генерации HTML
SortExpression Определяет выражение, которое может быть добавлено к запросу для выполнения сортировки на базе данного столбца
HtmlEncode Булев флаг включения URL-кодирования, при котором в генерируемом HTML управляющие символы заменяются на ASCII. Делает генерируемый HTML более безопасным на клиентской стороне и рекомендуется к применению как можно чаще
NullDisplayText Определяет текст, который будет отображен в таблице на месте null -значения (например, "неопределено" )
ConvertEmptyStringToNull Булев флаг. Если включен, то перед подтверждением обновления в конечном источнике данных все пустые строки будут преобразованы в null -значения
ControlStyle, HeaderStyle, FooterStyle, ItemStyle Определяет стиль конкретного раздела отдельного столбца

Ниже мы рассмотрим следующие разделы GridView:

  1. Форматирование - определение внешнего вида отображаемых данных
  2. Сортировка - изменение порядка следования табличных значений на экране пользователя в ответ на щелчки по заголовкам столбцов
  3. Раскладка по страницам - разбиение вывода больших наборов данных по отдельным страницам броузера
  4. Шаблоны - тонкая настройка большинства возможностей GridView путем определения шаблонов

Форматирование в GridView

Элемент GridView имеет встроенные свойства управления представлением генерируемой им экранной таблицы в целом. К ним, в том числе, относятся

  • HorizontalAlign - определяет выравнивание ячеек внутри сетки экранной таблицы
  • GridLines - определяет видимость сетки генерируемой экранной таблицы
  • CellPadding, CellSpacing - определяют промежутки между ячейками генерируемой сетки
  • Caption, CaptionAlign - определяет заголовок и его выравнивание в верхней части экранной таблицы
  • CssClass - устанавливает имя класса каскадной таблицы стилей
  • Стили - рассмотрим далее...

Форматирование полей в GridView

Каждый явно определяемый столбец GridView имеет строку форматирования в свойстве DataFormatString. Форматные строки состоят из заполнителя и спецификатора формата, заключенного в фигурные скобки.

Для иллюстрации материала нам понадобится тестовая страница.

  • Создайте новое приложение командой File/New/Web Site с именем WebSite10
  • Скопируйте в каталог нового проекта файл Web.Config из WebSite9 командой Website/Add Existing Item
  • Создайте новую страницу с объединенным кодом и именем GridViewFormated.aspx, которую заполните так
    <%@ Page Language="C#" %>
        
    <script runat="server">
        
        string sql1 = "SELECT TOP 3 * FROM Employees WHERE City<>''";
        string sql2 = "SELECT TOP 3 EmployeeID, FirstName, LastName, Title, "
                + "BirthDate, City, HomePhone, "
                + "Extension, Notes FROM Employees WHERE City<>''";
        string sql3 = "SELECT TOP 3 EmployeeID, FirstName, BirthDate, Extension "
                    + "FROM Employees WHERE City != ''";
            
        protected void Page_Load(object sender, EventArgs e)
        {
            Page.DataBind();
        }
    </script>
        
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
        <title>Untitled Page</title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <asp:SqlDataSource ID="SqlDataSource1" runat="server"
                SelectCommand= "<%# sql3 %>"
                ProviderName="System.Data.SqlClient"
                ConnectionString="<%$ ConnectionStrings:Northwind %>">
            </asp:SqlDataSource>
        </div>
            <asp:GridView ID="GridView1" runat="server"
                DataSourceID="SqlDataSource1">
            </asp:GridView>
        </form>
    </body>
    </html>
  • Исполните страницу GridViewFormated.aspx, чтобы получить такой начальный результат
EmployeeID FirstName BirthDate Extension
1 Nancy 08.12.1948 0:00:00 5467
2 Andrew 19.02.1952 0:00:00 3457
3 Janet 30.08.1963 0:00:00 3355

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

Спецификаторы формата для чисел и дат
Тип DataFormatString (варианты) Пример результата
Денежный {0:C} $1,234.50
Десятичный {0:D} руб. 1234 руб.
{0:D руб.} 1234 руб.
Шаблон {0:#,###.# руб.} 1,234.5 руб.
Научный (экспоненциальный) {0:E} 1.2345E+003
{0:E2} 12.345E+002
Процентный {0:P}
Фиксированный десятичный {0:F} 1234.5
{0:F0} 1234
- - -
Дата и время по умолчанию 06.15.2007 11:35:21
Дата {0:dd.MM.yyyy} 15.06.2007
{0:dd/MM/yyyy} 15/06/2007
{0:dddd - dd MMMM, yyyyг.} Пятрица - 15 Июнь, 2007г.
{0:dd MMMM} 15 Июнь
{0:dd.MM.yyyy, dddd} 15.06.2007, Пятница
Дата и время {0:dddd - dd MMMM, yyyyг. HH:mm aa} Пятрица - 15 Июнь, 2007г. 11:35 AM
{0:dddd - dd MMMM, yyyyг. HH:mm:ss aa} Пятрица - 15 Июнь, 2007г. 11:35:21 AM
{0:dd.MM.yyyy, HH} часов. 15.06.2007, 11 часов.
{0:dd.MM.yyyy, HH часов.} 15.06.2007, 11 часов.
Общий {0:G}

Теперь нужно настроить GridView1 на предмет форматирования полей и проверять приведенные спецификаторы. Учитывая, что в таблице Employees поля BirthDate и Extension датное и числовое соответственно, один из вариантов настройки GridView1 мог-бы быть таким

<%@ Page Language="C#" %>
    
<script runat="server">
    
    string sql1 = "SELECT TOP 3 * FROM Employees WHERE City<>''";
    string sql2 = "SELECT TOP 3 EmployeeID, FirstName, LastName, Title, "
            + "BirthDate, City, HomePhone, "
            + "Extension, Notes FROM Employees WHERE City<>''";
    string sql3 = "SELECT TOP 3 EmployeeID, FirstName, BirthDate, Extension "
                + "FROM Employees WHERE City != ''";
        
    protected void Page_Load(object sender, EventArgs e)
    {
        Page.DataBind();
    }
</script>
    
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
                ConnectionString="<%$ ConnectionStrings:Northwind %>"
                ProviderName="System.Data.SqlClient" 
                SelectCommand="<%# sql3 %>">
            </asp:SqlDataSource>
        </div>
        <asp:GridView ID="GridView1" runat="server" 
            DataSourceID="SqlDataSource1" 
            AutoGenerateColumns="False">
            <Columns>
                <asp:BoundField DataField="BirthDate" 
                    DataFormatString="{0:dd/MM/yyyy}" 
                    HeaderText="Родился"
                    ReadOnly="True" />
                <asp:BoundField DataField="Extension" 
                    DataFormatString="{0:## ###.##} р." 
                    HeaderText="Оклад"
                    ReadOnly="True" />
            </Columns>
        </asp:GridView>
    </form>
</body>
</html>
  • Запустите страницу GridViewFormated.aspx и убедитесь, что описанное форматирование не работает!!!
Неудачный HTML-вывод
Родился Оклад
08.12.1948 0:00:00 5467 р.
19.02.1952 0:00:00 3457 р.
30.08.1963 0:00:00 3355 р.
Я потратил полдня на попытки добиться успеха в этом вопросе, но описанный механизм форматирования GridView у меня все-равно не работает. Не работает и пример из MSDN. Просто замалчивать свое фиаско я не захотел. Теперь слово за вами, уважаемые студенты. Разберитесь в вопросе - может кто-то и запустит.

Идем дальше...

Стили в GridView

GridView предоставляет свойства для восьми стилей форматирования, перечисленные в таблице. Это не простые однозначные свойства, а составные объекты, имеющие все необходимые настройки. Все они влияют на внешний вид генерируемой HTML-сетки в целом.

Свойства стилей GridView
Свойства стилей Описание
HeaderStyle Определяет стиль строки заголовков столбцов
RowStyle Определяет стиль каждой строки данных
AlternatingRowStyle Определяет стиль каждой четной строки данных
SelectedRowStyle Определяет стиль текущей выбранной строки данных
EditRowStyle Определяет стиль текущей строки данных, находящейся в режиме редактирования
EmptyDataRowStyle Конфигурирует стиль, используемый для отображения одной пустой строки, когда привязанный объект данных вообще не содержит строк
FooterStyle Определяет стиль строки нижнего колонтитула столбцов ( ShowFooter=true )
PagerStyle Определяет внешний вид ссылок на составные страницы, если включено постраничное разбиение ( AllowPaging=true )

Настройку стилей для таблицы в целом можно выполнить тремя способами:

  1. В режиме Design через панель Properties, выделив элемент GridView. В этом случае создается стилевой дескриптор
    <asp:GridView ID="GridView1" runat="server" 
                DataSourceID="SqlDataSource1" 
                AutoGenerateColumns="False" >
                <RowStyle BackColor="Red" ForeColor="Yellow" HorizontalAlign="Center" />
            </asp:GridView>
  2. В режиме Source через панель Properties, установив курсов в заголовок открывающего дескриптора GridView. В этом случае создаются стилевые атрибуты этого дескриптора
    <asp:GridView ID="GridView1" runat="server" 
                DataSourceID="SqlDataSource1" 
                AutoGenerateColumns="False" 
                RowStyle-BackColor="red"
                RowStyle-ForeColor="yellow"
                RowStyle-HorizontalAlign="Center" >
            </asp:GridView>
  3. В режиме Source, набирая вручную либо стилевой дескриптор, либо уточняющие атрибуты. Подсказчик кода оболочки поможет правильно настроить стилевые параметры.

Аналогичным образом настраиваются индивидуальные стили столбцов для случая, когда в GridView явно определены столбцы.

< Лекция 13 || Лекция 14 || Лекция 15 >