Практическое руководство. Настройка отображения полей данных в модели данных

Visual Studio 2010

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

В этом разделе описывается настройка отображения поля данных (столбца таблицы) в платформе динамических данных ASP.NET путем создания собственного шаблона поля. В данном разделе описываются следующие задачи.

  • Создание пользовательского шаблона поля для настройки отображения поля данных.

  • Связывание пользовательского шаблона поля с полем данных. При этом в модели данных устанавливается связь между полем данных и пользовательским шаблоном поля для обработки отображения.

    Cc488522.alert_note(ru-ru,VS.100).gifПримечание.

    При настройке отображения поля данных с использованием модели данных изменения применяются ко всему веб-узлу. Это означает, что платформа динамических данных для отображения поля данных использует пользовательский шаблон поля вместо шаблона поля по умолчанию (который выбирается исходя из типа поля данных).

Создание пользовательского шаблона поля

  1. В Обозревателе решений щелкните правой кнопкой мыши папку DynamicData/FieldTemplates и выберите команду Добавить новый элемент.

  2. В группе Установленные шаблоны выберите Шаблон поля.

    В поле Имя введите имя элемента управления; можно использовать любое имя. Убедитесь, что установлен флажок Размещать код в отдельном файле.

  3. Перейдите к файлу только что созданного пользовательского элемента управления, или откройте его.

  4. В директиве @ Control добавьте атрибут CodeFile, который ссылается на файл с выделенным кодом, и атрибут Inherits, который ссылается на класс элемента управления.

    <%@ Control Language="C#" 
      CodeFile=MyCustomControl.ascx.cs"
      Inherits="MyCustomControl" %>
    

    <%@ Control Language="VB" 
      CodeFile=MyCustomControl.ascx.cs"
      Inherits="MyCustomControl" %>
    
  5. Создайте разметку, которая будет использоваться при отображении данных.

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

    <asp:Label id="TextLabel1" runat="server" 
      OnDataBinding="DataBindingHandler" 
      Text='<%# FieldValueString %>'>
    </asp:Label> 
    
  6. Сохраните изменения и закройте файл пользовательского элемента управления.

  7. Откройте файл с выделенным кодом пользовательского элемента управления.

  8. Добавьте директиву пространства имен, которая ссылается на System.Web.DynamicData, используя ключевое слово Imports в Visual Basic или ключевое слово using в Visual C#.

    using System.Web.DynamicData;
    

    Imports System.Web.DynamicData
    
  9. Создайте производный разделяемый класс пользовательского элемента управления на основе класса FieldTemplateUserControl, как показано ниже.

    partial class MyCustomControl: FieldTemplateUserControl
    

    { }

    Public Partial Class MyCustomControl Inherits _ FieldTemplateUserControl
        
    End Class 
    
  10. Чтобы настроить отображение поля данных элементом управления, создайте обработчик события OnDataBinding пользовательского элемента управления. В обработчике можно получить значение текущего поля данных из свойства FieldValue элемента управления и настроить отображение соответствующим образом.

    В следующем примере демонстрируется обработка события OnDataBinding.

    public void DataBindingHandler(object sender, EventArgs e)
    {
      // Define the understocked threshold.
      short underStockedThreshold = 150;
      // Get the current number of items in stock.
      short currentValue = (short)FieldValue;
      // Check product stock. 
      if (currentValue < underStockedThreshold)
      {
          // Customize display here. For example you show the data with      
         //a red background.
      }
    }
    

    Public Sub DataBindingHandler(ByVal sender As Object, _
    ByVal e As EventArgs)
      ' Define the understocked threshold.
      Dim underStockedThreshold As Short = 150
      ' Get the current number of items in stock.
        Dim currentValue As Short = DirectCast(FieldValue, Short)
        ' Check product stock. 
        If currentValue < underStockedThreshold Then
            'Customize display here. For example you show the data with      
           'a red background.
        End If
    End Sub
    
  11. Закройте файл с выделенным кодом пользовательского элемента управления. Таким образом, был создан пользовательский шаблон поля.

Связывание пользовательского шаблона поля с полем данных

  1. В Обозревателе решений щелкните правой кнопкой мыши папку App_Code и выберите команду Добавить новый элемент.

  2. В группе Установленные шаблоны выберите шаблон Класс.

    В поле Имя введите имя таблицы базы данных, содержащей данные для отображаемого пользовательского шаблона поля.

    Например, если пользовательский элемент управления отображает данные из таблицы Products, нужно указать имя файла Products.cs или Product.vb и имя класса Product. В этом файле также будет содержаться дополнительный класс, позволяющий настраивать отображение поля данных.

  3. Перейдите к файлу только что созданного класса, или откройте его.

  4. Добавьте ключевое слово Partial в Visual Basic или ключевое слово partial в Visual C# в определение созданного класса, чтобы сделать его разделяемым классом.

  5. Добавьте директиву пространства имен, которая ссылается на System.Web.DynamicData и System.ComponentModel.DataAnnotations, используя ключевое слово Imports в Visual Basic или ключевое слово using в Visual C#.

    using System.Web.DynamicData;
    using System.ComponentModel.DataAnnotations;
    

    Imports System.Web.DynamicData
    Imports System.ComponentModel.DataAnnotations 
    
  6. Добавьте в определение разделяемого класса атрибут MetadataTypeAttribute. Параметром атрибута является имя дополнительного класса метаданных, который будет создан для обработки настройки отображения поля данных.

    [MetadataType(typeof(ProductMetadata))]
    public partial class Product {
        
    }
    

    <MetadataType(GetType(ProductMetadata))> _
    Public Partial Class Product 
        
    End Class
    
  7. Создайте класс, выступающий в качестве дополнительного класса метаданных. Для класса можно использовать любое имя, однако оно должно соответствовать имени, указанному в атрибуте MetadataTypeAttribute на предыдущем шаге.

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

    Единственным назначением дополнительного класса является предоставление места для определения атрибута UIHintAttribute, так что вам не придется добавлять в класс дополнительный код.

    В следующем примере показано полное определение класса метаданных, включающее одно поле (с атрибутом UIHintAttribute), которое определяет настраиваемое отображение поля UnitsInStock.

    public class ProductMetadata
      [UIHint("UnitsInStock")]
      public object UnitsInStock;
    }
    

    Public Class ProductMetadata 
      <UIHint("UnitsInStock")> _
      Public UnitsInStock As Object
    End Class
    

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


<%@ Control Language="C#" CodeFile="UnitsInStock.ascx.cs" 
Inherits="DynamicData_FieldTemplates_UnitsInStock" %>

<asp:Label id="TextLabel1" OnDataBinding="DataBindingHandler"
Text='<%# FieldValueString %>' runat="server"></asp:Label>



using System.Web.DynamicData;

public partial class DynamicData_FieldTemplates_UnitsInStock :  FieldTemplateUserControl
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    // DataBinding event handler.
    public void DataBindingHandler(object sender, EventArgs e)
    {
        // Define product understocked threshold.
        short underStockedThreshold = 150;

        // Get the current number of items in stock.
        short currentValue = (short)FieldValue;

        // Check product stock. 
        if (currentValue < underStockedThreshold)
        {
            // The product is understocked, set its 
            // foreground color to red.
            TextLabel1.ForeColor = System.Drawing.Color.Red;
        }
    }

}


  • Microsoft Visual Studio 2008 с пакетом обновления 1 или Visual Web Developer 2008, экспресс-выпуск с пакетом обновления 1.

  • Учебная база данных AdventureWorksLT. Сведения о загрузке и установке учебной базы данных SQL Server см. в разделе Microsoft SQL Server Product Samples: Database на узле CodePlex. Важно установить правильную версию базы данных, соответствующую используемой версии SQL Server (Microsoft SQL Server 2005 или Microsoft SQL Server 2008).

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

Показ: