DataControlField 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
作為所有資料控制項欄位類型的基底類別,代表表格式資料繫結控制項中資料的資料行,例如 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 衍生自 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 可以是任何一組 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 ,控制項會顯示運動團隊的資料。 球員資料會保留在資料表中,其中包含識別碼資料行、球員名稱的資料行,以及可識別小組成員的 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 的類別來控制資料欄在資料繫結控制項中的顯示方式,例如 DetailsView 或 GridView 。 下表列出 ASP.NET 提供的不同資料控制項欄位類型。
資料列欄位類型 | 描述 |
---|---|
BoundField | 將資料來源中的欄位值顯示為文字。 |
ButtonField | 在資料繫結控制項中顯示命令按鈕。 視控制項而定,這可讓您顯示具有自訂按鈕控制項的資料列或資料行,例如 [新增] 或 [移除] 按鈕。 |
CheckBoxField | 在資料繫結控制項中顯示覆選框。 此資料控制項欄位類型通常用來顯示具有布林值的欄位。 |
CommandField | 顯示內建命令按鈕,以在資料繫結控制項中執行編輯、插入或刪除作業。 |
HyperLinkField | 將資料來源中的欄位值顯示為超連結。 此資料控制項欄位類型可讓您將第二個欄位系結至超連結的 URL。 |
ImageField | 在資料繫結控制項中顯示影像。 |
TemplateField | 根據指定的範本,在資料繫結控制項中顯示使用者定義的內容。 |
您也可以擴充 DataControlField 和 BoundField 類別,以建立自己的資料控制欄位類型。
類別 DataControlField 提供許多屬性,可決定使用者介面 (UI) 元素在資料繫結控制項中的呈現方式。 並非所有控制項在轉譯 UI 時,都會使用每個可用的資料控制項欄位屬性。 例如, DetailsView 會將資料控制項欄位顯示為數據列的控制項,包含每個資料控制項欄位的標頭專案,但沒有頁尾專案。 因此, FooterText 控制項會忽略 DetailsView 和 FooterStyle 屬性。 不過,如果 屬性設定 true
為 ,則 GridView 控制項會使用 FooterText 和 FooterStyle 屬性。 ShowFooter 同樣地,資料控制項欄位屬性會影響 UI 元素的呈現方式,視專案為何而定。 屬性 ItemStyle 一律會套用至 欄位。 如果衍生自 DataControlField 的類型包含 控制項,如 或 CheckBoxField 類別所示 ButtonField , ControlStyle 則會將 屬性套用至 欄位。
建構函式
DataControlField() |
初始化 DataControlField 類別的新執行個體。 |
屬性
AccessibleHeaderText |
取得或設定在部分控制項中呈現為 |
Control |
取得與 DataControlField 物件關聯之資料控制項的參考。 |
ControlStyle |
取得 DataControlField 物件內含之任何 Web 伺服器控制項的樣式。 |
DesignMode |
取得值,指示目前是否在設計階段環境中檢視資料控制項欄位。 |
FooterStyle |
取得或設定資料控制項欄位的頁尾樣式。 |
FooterText |
取得或設定顯示在資料控制項欄位之頁尾項目中的文字。 |
HeaderImageUrl |
取得或設定顯示在資料控制項欄位的標頭項目中之影像的 URL。 |
HeaderStyle |
取得或設定資料控制項欄位的標頭樣式。 |
HeaderText |
取得或設定顯示在資料控制項欄位之標頭項目中的文字。 |
InsertVisible |
取得值,指示 DataControlField 物件在其父資料繫結控制項處於插入模式時是否可見。 |
IsTrackingViewState |
取得值,指出 DataControlField 物件是否正在將變更儲存到它的檢視狀態。 |
ItemStyle |
取得由資料控制項欄位顯示之任何文字基礎內容的樣式。 |
ShowHeader |
取得或設定值,指示是否呈現資料控制項欄位的標頭項目。 |
SortExpression |
取得或設定資料來源控制項用於排序資料的排序運算式。 |
ValidateRequestMode |
取得或設定值,這個值會指定控制項是否驗證用戶端輸入。 |
ViewState |
取得狀態資訊的字典,允許您在相同頁面的多個要求之間,儲存和還原 DataControlField 物件的檢視狀態。 |
Visible |
取得或設定值,指示是否呈現資料控制項欄位。 |
方法
明確介面實作
IDataSourceViewSchemaAccessor.DataSourceViewSchema |
取得或設定與此 DataControlField 物件相關聯的結構描述。 |
IStateManager.IsTrackingViewState |
取得值,指出 DataControlField 物件是否正在將變更儲存到它的檢視狀態。 |
IStateManager.LoadViewState(Object) |
將資料控制項欄位還原成先前儲存的檢視狀態。 |
IStateManager.SaveViewState() |
儲存自頁面回傳至伺服器以來對 DataControlField 檢視狀態所做的變更。 |
IStateManager.TrackViewState() |
會造成 DataControlField 物件追蹤其檢視狀態變更,以將這些變更儲存在控制項的 ViewState 屬性中,並持續存取相同頁面的其他要求。 |