Практическое руководство. Динамическое создание шаблонов в серверном веб-элементе управления DataList

Visual Studio 2010

Обновлен: Ноябрь 2007

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

Создание файла определения шаблона

  1. Создайте текстовый файл с расширением ASCX.

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

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

    Name: <asp:Label ID="CategoryNameLabel" runat="server" 
              Text='<%# Eval("CategoryName") %>'>
          </asp:Label>
    <br />
    Description: <asp:Label ID="DescriptionLabel" runat="server" 
              Text='<%# Eval("Description") %>'>
          </asp:Label>
    

Динамическое создание шаблонов

  • Добавьте в страницу Web Forms код, загружающий шаблон с помощью метода LoadTemplate. Этот метод считывает определение шаблона из файла и создает объект ITemplate. Этот объект может быть присвоен любому шаблону в элементе управления DataList.

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

    Protected Sub Page_Init(ByVal Sender As System.Object, _
            ByVal e As System.EventArgs)
        DataList1.AlternatingItemTemplate = _
            Page.LoadTemplate("NewTemplate.ascx")
    End Sub
    

    protected void Page_Init(object sender, EventArgs e)
    {
        DataList1.AlternatingItemTemplate = 
            Page.LoadTemplate("NewTemplate.ascx");
    }
    
Показ: