Бөлісу құралы:


DataControlField Класс

Определение

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

public ref class DataControlField abstract : System::Web::UI::IDataSourceViewSchemaAccessor, System::Web::UI::IStateManager
[System.ComponentModel.TypeConverter(typeof(System.ComponentModel.ExpandableObjectConverter))]
public abstract class DataControlField : System.Web.UI.IDataSourceViewSchemaAccessor, System.Web.UI.IStateManager
[<System.ComponentModel.TypeConverter(typeof(System.ComponentModel.ExpandableObjectConverter))>]
type DataControlField = class
    interface IStateManager
    interface IDataSourceViewSchemaAccessor
Public MustInherit Class DataControlField
Implements IDataSourceViewSchemaAccessor, IStateManager
Наследование
DataControlField
Производный
Атрибуты
Реализации

Примеры

В следующем примере кода показано, как использовать BoundField и ButtonField объекты, производные от DataControlField, для отображения строк в элементе DetailsView управления. Элемент DetailsView управления имеет AutoGenerateRows значение falseсвойства, что позволяет ему отображать подмножество данных, возвращаемых свойством SelectCommand .

<%@ page language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>ASP.NET Example</title>
</head>
<body>
  <form id="form1" runat="server">

    <asp:sqldatasource
      id="SqlDataSource1"
      runat="server"
      connectionstring="<%$ ConnectionStrings:MyNorthwind%>"
      selectcommand="Select * From Employees">
    </asp:sqldatasource>

    <asp:detailsview
      id="DetailsView1"
      runat="server"
      allowpaging="True"
      datasourceid="SqlDataSource1"
      height="208px"
      width="264px"
      autogeneraterows="False">
        <fields>

          <asp:boundfield
            sortexpression="LastName"
            datafield="LastName"
            headertext="LastName">
              <itemstyle backcolor="Yellow">
              </itemstyle>
          </asp:boundfield>

          <asp:boundfield
            sortexpression="FirstName"
            datafield="FirstName"
            headertext="FirstName">
              <itemstyle forecolor="#C00000">
              </itemstyle>
          </asp:boundfield>

          <asp:buttonfield
            text="TestButton"
            buttontype="Button">
          </asp:buttonfield>

        </fields>
    </asp:detailsview>

  </form>
</body>
</html>
<%@ page language="VB" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>ASP.NET Example</title>
</head>
<body>
  <form id="form1" runat="server">

    <asp:sqldatasource
      id="SqlDataSource1"
      runat="server"
      connectionstring="<%$ ConnectionStrings:MyNorthwind%>"
      selectcommand="Select * From Employees">
    </asp:sqldatasource>

    <asp:detailsview
      id="DetailsView1"
      runat="server"
      allowpaging="True"
      datasourceid="SqlDataSource1"
      height="208px"
      width="264px"
      autogeneraterows="False">
        <fields>

          <asp:boundfield
            sortexpression="LastName"
            datafield="LastName"
            headertext="LastName">
              <itemstyle backcolor="Yellow">
              </itemstyle>
          </asp:boundfield>

          <asp:boundfield
            sortexpression="FirstName"
            datafield="FirstName"
            headertext="FirstName">
              <itemstyle forecolor="#C00000">
              </itemstyle>
          </asp:boundfield>

          <asp:buttonfield
            text="TestButton"
            buttontype="Button">
          </asp:buttonfield>

        </fields>
    </asp:detailsview>

  </form>
</body>
</html>

В следующем примере кода показано, как расширить BoundField класс для создания настраиваемого ограничивающего поля, которое можно использовать в элементе GridView управления. Как и класс CheckBoxField , RadioButtonField класс представляет столбец true или false данные. Однако, хотя данные, к которым CheckBoxField привязан класс, могут быть любым набором true или false значениями, набор данных, к которым RadioButtonField привязан класс, может иметь только одно true значение в любой момент времени. В этом примере показано, как реализовать ExtractValuesFromCell методы и InitializeCell два важных метода всех классов, производных от DataControlField.

namespace Samples.AspNet.CS {

  using System;
  using System.Collections;
  using System.Collections.Specialized;
  using System.ComponentModel;
  using System.Security.Permissions;
  using System.Web;
  using System.Web.UI;
  using System.Web.UI.WebControls;

  [AspNetHostingPermission(SecurityAction.Demand, 
      Level=AspNetHostingPermissionLevel.Minimal)]
  public sealed class RadioButtonField : CheckBoxField {

    public RadioButtonField() {
    }

    // Gets a default value for a basic design-time experience. 
    // Since it would look odd, even at design time, to have 
    // more than one radio button selected, make sure that none
    // are selected.
    protected override object GetDesignTimeValue() {
        return false;
    }
    // This method is called by the ExtractRowValues methods of 
    // GridView and DetailsView. Retrieve the current value of the 
    // cell from the Checked state of the Radio button.
    public override void ExtractValuesFromCell(IOrderedDictionary dictionary,
                                               DataControlFieldCell cell,
                                               DataControlRowState rowState,
                                               bool includeReadOnly)
    {

      // Determine whether the cell contains a RadioButton 
      // in its Controls collection.
      if (cell.Controls.Count > 0) {
        RadioButton radio = cell.Controls[0] as RadioButton;

        object checkedValue = null;
        if (null == radio) {
          // A RadioButton is expected, but a null is encountered.
          // Add error handling.
          throw new InvalidOperationException
              ("RadioButtonField could not extract control.");
        }
        else {
            checkedValue = radio.Checked;
        }

        // Add the value of the Checked attribute of the
        // RadioButton to the dictionary.
        if (dictionary.Contains(DataField))
          dictionary[DataField] = checkedValue;
        else
          dictionary.Add(DataField, checkedValue);
      }
    }
    // This method adds a RadioButton control and any other 
    // content to the cell's Controls collection.
    protected override void InitializeDataCell
        (DataControlFieldCell cell, DataControlRowState rowState) {

      RadioButton radio = new RadioButton();

      // If the RadioButton is bound to a DataField, add
      // the OnDataBindingField method event handler to the
      // DataBinding event.
      if (DataField.Length != 0) {
        radio.DataBinding += new EventHandler(this.OnDataBindField);
      }

      radio.Text = this.Text;

      // Because the RadioButtonField is a BoundField, it only
      // displays data. Therefore, unless the row is in edit mode,
      // the RadioButton is displayed as disabled.
      radio.Enabled = false;
      // If the row is in edit mode, enable the button.
      if ((rowState & DataControlRowState.Edit) != 0 ||
          (rowState & DataControlRowState.Insert) != 0) {
        radio.Enabled = true;
      }

      cell.Controls.Add(radio);
    }
  }
}
Imports System.Collections.Specialized
Imports System.Collections
Imports System.ComponentModel
Imports System.Security.Permissions
Imports System.Web
Imports System.Web.UI
Imports System.Web.UI.WebControls

Namespace Samples.AspNet.VB

    <AspNetHostingPermission(SecurityAction.Demand, _
        Level:=AspNetHostingPermissionLevel.Minimal)> _
    Public NotInheritable Class RadioButtonField
        Inherits CheckBoxField

        Public Sub New()
        End Sub

        ' Gets a default value for a basic design-time experience. Since
        ' it would look odd, even at design time, to have more than one
        ' radio button selected, make sure that none are selected.
        Protected Overrides Function GetDesignTimeValue() As Object
            Return False
        End Function

        ' This method is called by the ExtractRowValues methods of
        ' GridView and DetailsView. Retrieve the current value of the 
        ' cell from the Checked state of the Radio button.
        Public Overrides Sub ExtractValuesFromCell( _
            ByVal dictionary As IOrderedDictionary, _
            ByVal cell As DataControlFieldCell, _
            ByVal rowState As DataControlRowState, _
            ByVal includeReadOnly As Boolean)
            ' Determine whether the cell contain a RadioButton 
            ' in its Controls collection.
            If cell.Controls.Count > 0 Then
                Dim radio As RadioButton = CType(cell.Controls(0), RadioButton)

                Dim checkedValue As Object = Nothing
                If radio Is Nothing Then
                    ' A RadioButton is expected, but a null is encountered.
                    ' Add error handling.
                    Throw New InvalidOperationException( _
                        "RadioButtonField could not extract control.")
                Else
                    checkedValue = radio.Checked
                End If


                ' Add the value of the Checked attribute of the
                ' RadioButton to the dictionary.
                If dictionary.Contains(DataField) Then
                    dictionary(DataField) = checkedValue
                Else
                    dictionary.Add(DataField, checkedValue)
                End If
            End If
        End Sub
        ' This method adds a RadioButton control and any other 
        ' content to the cell's Controls collection.
        Protected Overrides Sub InitializeDataCell( _
            ByVal cell As DataControlFieldCell, _
            ByVal rowState As DataControlRowState)

            Dim radio As New RadioButton()

            ' If the RadioButton is bound to a DataField, add
            ' the OnDataBindingField method event handler to the
            ' DataBinding event.
            If DataField.Length <> 0 Then
                AddHandler radio.DataBinding, AddressOf Me.OnDataBindField
            End If

            radio.Text = Me.Text

            ' Because the RadioButtonField is a BoundField, it only 
            ' displays data. Therefore, unless the row is in edit mode, 
            ' the RadioButton is displayed as disabled.
            radio.Enabled = False
            ' If the row is in edit mode, enable the button.
            If (rowState And DataControlRowState.Edit) <> 0 _
                OrElse (rowState And DataControlRowState.Insert) <> 0 Then
                radio.Enabled = True
            End If

            cell.Controls.Add(radio)
        End Sub

    End Class

End Namespace

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

<%@ page language="C#" %>
<%@ Register Tagprefix="aspSample"
             Namespace="Samples.AspNet.CS"
             Assembly="Samples.AspNet.CS" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>ASP.NET Example</title>
</head>
<body>
    <form id="form1" runat="server">
        <asp:gridview
          id="GridView1"
          runat="server"
          allowpaging="True"
          datasourceid="SqlDataSource1"
          allowsorting="True"
          autogeneratecolumns="False"
          autogenerateeditbutton="True"
          datakeynames="AnID">
            <columns>

                <aspSample:radiobuttonfield
                  headertext="RadioButtonField"
                  text="TeamLeader"
                  datafield="TrueFalse">
                </aspSample:radiobuttonfield>

                <asp:boundfield
                  insertvisible="False"
                  sortexpression="AnID"
                  datafield="AnID"
                  readonly="True"
                  headertext="AnID">
                </asp:boundfield>

                <asp:boundfield
                  sortexpression="FirstName"
                  datafield="FirstName"
                  headertext="FirstName">
                </asp:boundfield>

                <asp:boundfield
                  sortexpression="LastName"
                  datafield="LastName"
                  headertext="LastName">
                </asp:boundfield>

              </columns>
        </asp:gridview>
        <asp:sqldatasource
          id="SqlDataSource1"
          runat="server"
          connectionstring="<%$ ConnectionStrings:MyNorthwind%>"
          selectcommand="SELECT AnID,FirstName,LastName,TeamLeader FROM Players"
          updatecommand="UPDATE Players SET TrueFalse='false';UPDATE Players SET TrueFalse='true' WHERE AnID=@anID">
        </asp:sqldatasource>

    </form>
</body>
</html>
<%@ page language="VB" %>
<%@ Register Tagprefix="aspSample"
             Namespace="Samples.AspNet.VB"
             Assembly="Samples.AspNet.VB" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>ASP.NET Example</title>
</head>
<body>
    <form id="form1" runat="server">

        <asp:gridview
          id="GridView1"
          runat="server"
          allowpaging="True"
          datasourceid="SqlDataSource1"
          allowsorting="True"
          autogeneratecolumns="False"
          autogenerateeditbutton="True"
          datakeynames="AnID">
            <columns>
                <aspSample:radiobuttonfield
                  headertext="RadioButtonField"
                  text="TeamLeader"
                  datafield="TrueFalse">
                </aspSample:radiobuttonfield>

                <asp:boundfield
                  insertvisible="False"
                  sortexpression="AnID"
                  datafield="AnID"
                  readonly="True"
                  headertext="AnID">
                </asp:boundfield>

                <asp:boundfield
                  sortexpression="FirstName"
                  datafield="FirstName"
                  headertext="FirstName">
                </asp:boundfield>

                <asp:boundfield
                  sortexpression="LastName"
                  datafield="LastName"
                  headertext="LastName">
                </asp:boundfield>

              </columns>
        </asp:gridview>
        <asp:sqldatasource
          id="SqlDataSource1"
          runat="server"
          connectionstring="<%$ ConnectionStrings:MyNorthwind%>"
          selectcommand="SELECT AnID,FirstName,LastName,TeamLeader FROM Players"
          updatecommand="UPDATE Players SET TrueFalse='false';UPDATE Players SET TrueFalse='true' WHERE AnID=@anID">
        </asp:sqldatasource>

    </form>
</body>
</html>

Комментарии

Класс DataControlField служит базовым классом для всех типов полей управления данными. Поля управления данными используются элементами управления, привязанными к данным, для представления поля данных, аналогично тому, как DataGridColumn объект представляет тип столбца в элементе DataGrid управления.

Используйте классы, производные от того, как поле данных отображается в элементе управления, связанном с DataControlField данными, напримерDetailsView.GridView В следующей таблице перечислены различные типы полей управления данными, предоставляемые ASP.NET.

Тип поля столбца Описание
BoundField Отображает значение поля в источнике данных в виде текста.
ButtonField Отображает кнопку команды в элементе управления с привязкой к данным. В зависимости от элемента управления это позволяет отображать строку или столбец с пользовательским элементом управления кнопкой, например кнопкой "Добавить" или "Удалить".
CheckBoxField Отображает флажок в элементе управления с привязкой к данным. Этот тип поля элемента управления данными обычно используется для отображения полей с логическим значением.
CommandField Отображает встроенные кнопки команд для выполнения операций редактирования, вставки или удаления в элементе управления с привязкой к данным.
HyperLinkField Отображает значение поля в источнике данных в виде гиперссылки. Этот тип поля элемента управления данными позволяет привязать второе поле к URL-адресу гиперссылки.
ImageField Отображает изображение в элементе управления с привязкой к данным.
TemplateField Отображает определяемое пользователем содержимое в элементе управления с привязкой к данным в соответствии с указанным шаблоном.

Вы также можете расширить DataControlField возможности и BoundField классы для создания собственных типов полей управления данными.

Класс DataControlField предоставляет множество свойств, определяющих, как элементы пользовательского интерфейса представлены в элементе управления с привязкой к данным. Не каждый элемент управления использует каждое доступное свойство поля элемента управления данными при отрисовке пользовательского интерфейса. Например, элемент DetailsView управления, отображающий поля элемента управления данными в виде строк, включает в себя элемент заголовка для каждого поля элемента управления данными, но без элемента нижнего колонтитула. Таким образом, свойства FooterText и FooterStyle свойства игнорируются элементом DetailsView управления. Однако элемент GridView управления использует FooterText свойства и FooterStyle свойства, если ShowFooter свойству присвоено значение true. Аналогичным образом свойства поля элемента управления данными влияют на представление элементов пользовательского интерфейса в зависимости от того, что такое элемент. Свойство ItemStyle всегда применяется к полю. Если тип, производный от DataControlField элемента управления, как в ButtonField или CheckBoxField классах, ControlStyle применяется к полю.

Конструкторы

DataControlField()

Инициализирует новый экземпляр класса DataControlField.

Свойства

AccessibleHeaderText

Возвращает или задает текст, отображающийся как значение свойство AbbreviatedText некоторых элементов управления.

Control

Возвращает ссылку на элемент управления данными, с которым связан объект DataControlField.

ControlStyle

Получает стиль любых серверных веб-элементов управления, содержащихся в объекте DataControlField.

DesignMode

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

FooterStyle

Возвращает или задает стиль нижнего колонтитула поля элемента управления данными.

FooterText

Возвращает или задает текст для отображения в нижнем колонтитуле поля элемента управления данными.

HeaderImageUrl

Возвращает или задает URL -адрес изображения для отображения в верхнем колонтитуле поля элемента управления данными.

HeaderStyle

Возвращает или задает стиль верхнего колонтитула поля элемента управления данными.

HeaderText

Возвращает или задает текст для отображения в верхнем колонтитуле поля элемента управления данными.

InsertVisible

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

IsTrackingViewState

Получает значение, указывающее сохраняет ли объект DataControlField изменения в данных о состоянии представления.

ItemStyle

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

ShowHeader

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

SortExpression

Возвращает или задает выражение сортировки, используемое элементом управления источником данных для сортировки данных.

ValidateRequestMode

Получает или задает значение, указывающее, проверяет ли элемент управления клиентский ввод.

ViewState

Возвращает словарь сведений о состоянии, позволяющих сохранять и восстанавливать состояние представления объекта DataControlField при нескольких запросах одной и той же страницы.

Visible

Возвращает или задает значение, определяющее, отображается ли поле элемента управления данными.

Методы

CloneField()

Создает точную копию текущего объекта, производного от DataControlField.

CopyProperties(DataControlField)

Копирует свойства текущего объекта, производного от DataControlField в указанный объект DataControlField.

CreateField()

При переопределении в производном классе создает пустой объект, производный от DataControlField.

Equals(Object)

Определяет, равен ли указанный объект текущему объекту.

(Унаследовано от Object)
ExtractValuesFromCell(IOrderedDictionary, DataControlFieldCell, DataControlRowState, Boolean)

Добывает значение поля элемента управления данными из текущей ячейки таблицы и добавляет значение в указанную коллекцию IDictionary.

GetHashCode()

Служит хэш-функцией по умолчанию.

(Унаследовано от Object)
GetType()

Возвращает объект Type для текущего экземпляра.

(Унаследовано от Object)
Initialize(Boolean, Control)

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

InitializeCell(DataControlFieldCell, DataControlCellType, DataControlRowState, Int32)

Добавляет в коллекцию ячейки элемента управления текст или элементы управления.

LoadViewState(Object)

Восстанавливает сохраненное раннее состояние представления источника данных.

MemberwiseClone()

Создает неполную копию текущего объекта Object.

(Унаследовано от Object)
OnFieldChanged()

Вызывает событие FieldChanged.

SaveViewState()

Сохраняет изменения в состояние объекта DataControlField после того, как страница отправлена на сервер.

ToString()

Возврат строки, представляющей объект DataControlField.

TrackViewState()

Инициирует отслеживание объектом DataControlField изменений в состоянии его представления, благодаря чему эти изменения можно сохранить в свойстве элемента ViewState элемента управления и хранить их для всех запросов одной и той же страницы.

ValidateSupportsCallback()

При переопределении в производном классе, сообщает о поддержке ответов элементов управления поля.

Явные реализации интерфейса

IDataSourceViewSchemaAccessor.DataSourceViewSchema

Возвращает или задает схему, связанную с этим объектом DataControlField.

IStateManager.IsTrackingViewState

Получает значение, указывающее сохраняет ли объект DataControlField изменения в данных о состоянии представления.

IStateManager.LoadViewState(Object)

Восстанавливает сохраненное раннее состояние представления поля источника данных.

IStateManager.SaveViewState()

Сохраняет изменения в состояние объекта DataControlField после того, как страница отправлена на сервер.

IStateManager.TrackViewState()

Инициирует отслеживание объектом DataControlField изменений в состоянии его представления, благодаря чему эти изменения можно сохранить в свойстве элемента ViewState элемента управления и хранить их для всех запросов одной и той же страницы.

Применяется к

См. также раздел