Опубликован: 14.11.2006 | Уровень: для всех | Доступ: платный
Лекция 8:

Элементы-потребители данных. Data-Bound Controls

Форма, которая читает информацию из этого файла:

<%@ Page Language="C#" Debug="true" %>

<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Xml" %>

<script runat="server">

    void bindData()
    {
        String xmlFilename = Server.MapPath("") + "\\nobel.xml";
        DataSet newDataSet = new DataSet();
        newDataSet.ReadXml(xmlFilename);
        DataTable newDataTable = newDataSet.Tables[1];
        DataGrid1.DataSource = newDataTable;
        DataGrid1.DataBind();
    }

    void Page_Load()
    {
        if (!IsPostBack)
            bindData();
    }
</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Data Grid Control example</title>
</head>
<body>
    <form runat="server">
        <asp:DataGrid id="DataGrid1" runat="server" 
CellSpacing="10"
        BorderWidth ="0"  BackColor="AliceBlue" EditItemIndex = 
"1">
        <HeaderStyle BackColor="#AAAADD" Font-Size="20pt" Font-
Bold = "True">
        </HeaderStyle>
        <AlternatingItemStyle BackColor="#80FF80" />
</asp:DataGrid>
    </form>
</body>
</html>

Поменяв индекс в DataTable newDataTable = newDataSet.Tables[1] на 3, получим страницу с другими данными — лауреатов премии по литературе.

По умолчанию элемент DataGrid сам определяет количество полей в источнике данных и генерирует колонки таблицы. Это определяется свойством AutoGenerateColumns. С элементом управления DataGrid могут быть связаны не все типы данных. Поддерживаются примитивные типы, строки, DataTime и Decimal. Если в поле неподдерживаемый тип, столбец не будет создан. Если ни одного подходящего поля нет, будет выброшено исключение.

DataGrid имеет заголовок ( Header ), который по умолчанию виден, и нижний колонтитул ( Footer ). При автоматической генерации в заголовке каждого столбца выводится название поля.

Если AutoGenerateColumns установить в False, можно самим управлять колонками и определять более сложный его вид. В таком случае надо включать в DataGrid элементы BoundColumn. Некоторые свойства BoundColumn:

  • DataField определяет поле источника данных;
  • DataFormatString задает формат вывода данных;
  • ReadOnly делает поле недоступным для редактирования.

В заголовке и нижнем колонтитуле можно установить любой текст, а в заголовке — еще и картинку ( HeaderText, FooterText, HeaderImageUrl ).

В ячейку генерируемой DataGrid таблицы вставляется LiteralControl, текст которого берется из источника данных и форматируется в соответствии с DataFormatString. Для редактируемой строки в ячейке появляется TextBox.

Есть и другие типы колонок.

ButtonColumn отображает в каждой строке командную кнопку. Если связать ее с полем, на кнопках будут надписи из этого поля.

EditCommandColumn показывает кнопки для редактирования.

HyperLinkColumn превращает текст в гиперссылки. Например, поле PhotoPath можно показать в такой колонке, и тогда щелчок по ссылке покажет фотографию.

TemplateColumn позволяет определить шаблон отображения, как в DataList.

При желании можно программно скрывать и показывать колонки, например:

DataGrid1.Columns[1].Visible = !(DataGrid1.Columns[1].Visible);

У элемента DataGrid есть 7 свойств, задающих стили различных его частей или типов строк. Все они имеют тип TableItemStyle. Это AlternatingItemStyle, EditItemStyle, FooterStyle, HeaderStyle, ItemStyle, PagerStyle и SelectedItemStyle. Стили образуют иерархию, то есть атрибут "Стиль", который выше в иерархии, наследует те, которые ниже, если он его не переопределяет. Порядок в ней такой:

  1. EditItemStyle — стиль редактируемой строки;
  2. SelectedItemStyle — стиль выбранной строки;
  3. AlternatingItemStyle — стиль каждой второй строки;
  4. ItemStyle — стиль строки по умолчанию;
  5. ControlStyle — все свойства, которые влияют на внешний вид элемента, например BackColor. PagerStyle, FooterStyle, HeaderStyle тоже его наследуют.
  6. PagerStyle — стиль пейджера, то есть номеров страниц-гиперссылок, при выборе которых таблица перелистывается. Чтобы пейджер появился, должен быть установлен атрибут AllowPaging и количество записей должно быть больше PageSize. Все эти свойства удобно устанавливать с помощью PropertyBuilder.

В Visual Studio 2005 есть возможность автоформатирования, как и у DataList.

Новый вариант, без автоматической генерации колонок и со стилями:

<asp:DataGrid ID="DataGrid2" runat="server" BackColor="#FFE0C0" 
ShowFooter="True" AutoGenerateColumns="False" PageSize="3">
    <AlternatingItemStyle BackColor="#C0FFC0" />
    <ItemStyle BackColor="#FFFFC0" />
    <EditItemStyle BackColor="#C0C000" Font-Size="XX-Large" />
    <Columns>
        <asp:BoundColumn DataField="name" FooterText="Name" 
HeaderText="Фамилия"></asp:BoundColumn>
        <asp:BoundColumn DataField="nationality" 
FooterText="Country" HeaderText="Страна"></asp:BoundColumn>
        <asp:BoundColumn DataField="winningdate" FooterText="Year 
won" HeaderText="Год"></asp:BoundColumn>
        <asp:BoundColumn DataField="work" FooterText="Work" 
HeaderText="Произведение"></asp:BoundColumn>
        </Columns>
        <FooterStyle Font-Bold="True" Font-Italic="False" Font-
Overline="False" Font-Strikeout="False" Font-Underline="False" />
        <HeaderStyle Font-Bold="True" Font-Italic="False" Font-
Overline="False" Font-Strikeout="False" Font-Underline="False" /> 
</asp:DataGrid>
Алексей Савельев
Алексей Савельев

https://technet.microsoft.com/en-us/library/ms143221(v=sql.105).aspx

Денис Прокофьев
Денис Прокофьев

Везде написано, что это самый независимый и простой в использовании навигационный элемент управления, что он работает сразу с web.sitemap и не требует определения SiteMapDataSource.

Моя карта сайта состоит из двух страниц, вложенных друг в друга. asp:Menu, asp:TreeView отбображаются как ожидалось, а вот asp:SiteMapPath - нет. Он не виден нигде. Однако на его месте формируется разметка: <span id="SiteMapPath1"><a href="#SiteMapPath1_SkipLink" style="position:absolute;left:-10000px;top:auto;width:1px;height:1px;overflow:hidden;">Проход по ссылкам навигации</a><a id="SiteMapPath1_SkipLink"></a></span> - т.е. элемент отрабатывает.

В словах xHTML это выглядит так: <asp:SiteMapPath ID="SiteMapPath1" runat="server" />. Причем не важно - внутри тега form или снаружи - всегда одинаково.

Т.к. другие нав. ЭУ работают через простой источник данных без ошибок, делаю вывод - карта составлена правильно. ИД: <asp:SiteMapDataSource ID="SiteMapDataSource1" runat="server" />

Карта: <?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
  <siteMapNode url="~/L11_1_simplePage.aspx" title="Страница 1"  description="Простая страница 1." >
    <siteMapNode url="~/L11_1SimplePage2.aspx" title="Страница 2"  description="Простая страница 2" />
  </siteMapNode>
</siteMap>

Почему так происходит? Вроде делаю все по примерам. VS Community 2015. NetFramework в проекте: v4.0.30319

Зарина Каримова
Зарина Каримова
Казахстан, Алматы, Гимназия им. Ахмета Байтурсынова №139, 2008
Akiyev Begench
Akiyev Begench
Беларусь, Полоцк, полоцкий государственный университет