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
- 派生
- 属性
- 实现
示例
下面的代码示例演示如何使用BoundFieldButtonField派生自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 显示运动队的数据。 玩家数据保留在数据表中,其中包含 ID 列、玩家名称的列,以及标识团队队长的真实或假列。 该 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属性。 但是,如果ShowFooter属性设置为 true
,FooterText则GridView控件使用和FooterStyle属性。 同样,数据控件字段属性会影响 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 |
获取或设置指示是否呈现数据控件字段的值。 |
方法
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() |
引发 |
SaveViewState() |
保存在页回发到服务器后对 DataControlField 视图状态所做的更改。 |
ToString() |
返回表示此 DataControlField 对象的字符串。 |
TrackViewState() |
使 DataControlField 对象跟踪对其视图状态所做的更改,以便这些更改可以存储在控件的 ViewState 属性中并且能够在同一页的不同请求间得以保持。 |
ValidateSupportsCallback() |
当在派生类中重写时,发出信号表示字段所包含的控件支持回调。 |
显式接口实现
IDataSourceViewSchemaAccessor.DataSourceViewSchema |
获取或设置与此 DataControlField 对象关联的架构。 |
IStateManager.IsTrackingViewState |
获取一个值,该值指示 DataControlField 对象是否保存对其视图状态的更改。 |
IStateManager.LoadViewState(Object) |
将数据控件字段还原为保存过的前一视图状态。 |
IStateManager.SaveViewState() |
保存在页回发到服务器后对 DataControlField 视图状态所做的更改。 |
IStateManager.TrackViewState() |
使 DataControlField 对象跟踪对其视图状态所做的更改,以便这些更改可以存储在控件的 ViewState 属性中并且能够在同一页的不同请求间得以保持。 |