DataControlField 類別

定義

作為所有資料控制項欄位類型的基底類別,代表表格式資料繫結控制項中資料的資料行,例如 DetailsViewGridView

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 衍生自 DataControlField 的 和 ButtonField 物件,在 控制項中 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 代表 或 false 資料行 true 。 不過,雖然類別所系結的資料 CheckBoxField 可以是任何一組 truefalse 值,但類別所系結的資料集 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 ,控制項會顯示運動團隊的資料。 球員資料會保留在資料表中,其中包含識別碼資料行、球員名稱的資料行,以及可識別小組成員的 true 或 false 資料行。 類別 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 的類別來控制資料欄在資料繫結控制項中的顯示方式,例如 DetailsViewGridView 。 下表列出 ASP.NET 提供的不同資料控制項欄位類型。

資料列欄位類型 描述
BoundField 將資料來源中的欄位值顯示為文字。
ButtonField 在資料繫結控制項中顯示命令按鈕。 視控制項而定,這可讓您顯示具有自訂按鈕控制項的資料列或資料行,例如 [新增] 或 [移除] 按鈕。
CheckBoxField 在資料繫結控制項中顯示覆選框。 此資料控制項欄位類型通常用來顯示具有布林值的欄位。
CommandField 顯示內建命令按鈕,以在資料繫結控制項中執行編輯、插入或刪除作業。
HyperLinkField 將資料來源中的欄位值顯示為超連結。 此資料控制項欄位類型可讓您將第二個欄位系結至超連結的 URL。
ImageField 在資料繫結控制項中顯示影像。
TemplateField 根據指定的範本,在資料繫結控制項中顯示使用者定義的內容。

您也可以擴充 DataControlFieldBoundField 類別,以建立自己的資料控制欄位類型。

類別 DataControlField 提供許多屬性,可決定使用者介面 (UI) 元素在資料繫結控制項中的呈現方式。 並非所有控制項在轉譯 UI 時,都會使用每個可用的資料控制項欄位屬性。 例如, DetailsView 會將資料控制項欄位顯示為數據列的控制項,包含每個資料控制項欄位的標頭專案,但沒有頁尾專案。 因此, FooterText 控制項會忽略 DetailsViewFooterStyle 屬性。 不過,如果 屬性設定 true 為 ,則 GridView 控制項會使用 FooterTextFooterStyle 屬性。 ShowFooter 同樣地,資料控制項欄位屬性會影響 UI 元素的呈現方式,視專案為何而定。 屬性 ItemStyle 一律會套用至 欄位。 如果衍生自 DataControlField 的類型包含 控制項,如 或 CheckBoxField 類別所示 ButtonFieldControlStyle 則會將 屬性套用至 欄位。

建構函式

DataControlField()

初始化 DataControlField 類別的新執行個體。

屬性

AccessibleHeaderText

取得或設定在部分控制項中呈現為 AbbreviatedText 屬性值的文字。

Control

取得與 DataControlField 物件關聯之資料控制項的參考。

ControlStyle

取得 DataControlField 物件內含之任何 Web 伺服器控制項的樣式。

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()

在衍生類別中覆寫時,表示欄位所包含的控制項支援回呼 (Callback)。

明確介面實作

IDataSourceViewSchemaAccessor.DataSourceViewSchema

取得或設定與此 DataControlField 物件相關聯的結構描述。

IStateManager.IsTrackingViewState

取得值,指出 DataControlField 物件是否正在將變更儲存到它的檢視狀態。

IStateManager.LoadViewState(Object)

將資料控制項欄位還原成先前儲存的檢視狀態。

IStateManager.SaveViewState()

儲存自頁面回傳至伺服器以來對 DataControlField 檢視狀態所做的變更。

IStateManager.TrackViewState()

會造成 DataControlField 物件追蹤其檢視狀態變更,以將這些變更儲存在控制項的 ViewState 屬性中,並持續存取相同頁面的其他要求。

適用於

另請參閱