FormViewCommandEventHandler 委托
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
表示处理 ItemCommand 控件的 FormView 事件的方法。 此类不能被继承。
public delegate void FormViewCommandEventHandler(System::Object ^ sender, FormViewCommandEventArgs ^ e);
public delegate void FormViewCommandEventHandler(object sender, FormViewCommandEventArgs e);
type FormViewCommandEventHandler = delegate of obj * FormViewCommandEventArgs -> unit
Public Delegate Sub FormViewCommandEventHandler(sender As Object, e As FormViewCommandEventArgs)
参数
- sender
- Object
事件源。
包含事件数据的 FormViewCommandEventArgs。
示例
下面的示例演示如何以编程方式向 控件的 FormView 事件添加FormViewCommandEventHandler委托ItemCommand。
<%@ page language="C#" %>
<%@ import namespace="System.Data"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
// To dynamically create a template for a FormView control,
// you must create a custom template class to represent
// the template. This template class represents the item
// template for a FormView control.
private sealed class EmployeeTemplate : ITemplate
{
// When implementing the ITemplate interface, you must
// implement the InstantiateIn method. The FormView
// control calls this method to create the template's
// content.
void ITemplate.InstantiateIn(Control container)
{
// Create the child controls contained in the template.
// For this example, the item template displays the
// FirstName and LastName fields from the data source.
// To support data binding, create event handlers
// for the DataBinding event of each child control.
// The event handlers must bind the appropriate value
// to each control.
Label firstNameLabel = new Label();
firstNameLabel.ID = "FirstNameLabel";
firstNameLabel.DataBinding += new EventHandler(FirstNameLabel_DataBinding);
LiteralControl nameLineBreak = new LiteralControl("<br/>");
LiteralControl buttonLineBreak = new LiteralControl("<br/>");
Label lastNameLabel = new Label();
lastNameLabel.ID = "LastNameLabel";
lastNameLabel.DataBinding += new EventHandler(LastNameLabel_DataBinding);
// Create a custom button control to display in the item
// template. When a button within a FormView control is
// clicked, the ItemCommand event is raised. The ItemCommand
// event is used to handle the clicking of this button.
Button displayButton = new Button();
displayButton.ID = "AddButton";
displayButton.CommandName = "Display";
displayButton.Text = "Display Employee";
// Add the controls to the Controls collection of the
// container control.
container.Controls.Add(firstNameLabel);
container.Controls.Add(nameLineBreak);
container.Controls.Add(lastNameLabel);
container.Controls.Add(buttonLineBreak);
container.Controls.Add(displayButton);
}
// This event handler binds the value of the FirstName field
// to the FirstNameLabel Label control displayed in the template.
private void FirstNameLabel_DataBinding(Object sender, EventArgs e)
{
// Use the sender parameter to retrieve the Label control
// being bound to data.
Label firstNameLabelControl = (Label)sender;
// Retrieve the value to bind to the Label control. First,
// use the NamingContainer property to retrieve the parent
// control of the Label control. In this example, the parent
// control is the FormView control.
FormView formViewContainer = (FormView)firstNameLabelControl.NamingContainer;
// Get the data item bound to the FormView control.
DataRowView rowView = (DataRowView)formViewContainer.DataItem;
// Use the data item to retrieve the value of the FirstName field.
// Set the Text property of the Label control to this value.
firstNameLabelControl.Text = rowView["FirstName"].ToString();
}
// This event handler binds the value of the LastName field
// to the LastNameLabel Label control displayed in the template.
private void LastNameLabel_DataBinding(Object sender, EventArgs e)
{
// Use the sender parameter to retrieve the Label control
// being bound to data.
Label lastNameLabelControl = (Label)sender;
// Retrieve the value to bind to the Label control. First,
// use the NamingContainer property to retrieve the parent
// control of the Label control. In this example, the parent
// control is the FormView control.
FormView formViewContainer = (FormView)lastNameLabelControl.NamingContainer;
// Get the data item bound to the FormView control.
DataRowView rowView = (DataRowView)formViewContainer.DataItem;
// Use the data item to retrieve the value of the LastName field.
// Set the Text property of the Label control to this value.
lastNameLabelControl.Text = rowView["LastName"].ToString();
}
}
void Page_Load(Object sender, EventArgs e)
{
// Create a new FormView object.
FormView employeesFormView = new FormView();
// Set the FormView object's properties.
employeesFormView.ID = "EmployeesFormView";
employeesFormView.DataSourceID = "EmployeeSource";
employeesFormView.AllowPaging = true;
employeesFormView.HeaderText = "Employee Name";
// Programmatically register the event handlers for the
// FormView control.
employeesFormView.ItemCommand += new FormViewCommandEventHandler(EmployeesFormView_ItemCommand);
employeesFormView.PageIndexChanged += new EventHandler(EmployeesFormView_PageIndexChanged);
// Create the dynamic template using the custom template class.
employeesFormView.ItemTemplate = new EmployeeTemplate();
// Add the FormView object to the Controls collection
// of the PlaceHolder control.
FormViewPlaceHolder.Controls.Add(employeesFormView);
}
void EmployeesFormView_ItemCommand(Object sender, FormViewCommandEventArgs e)
{
// The ItemCommand event is raised when any button within
// the FormView control is clicked. Use the CommandName property
// to determine which button was clicked.
if (e.CommandName == "Display")
{
// Use the sender parameter to get the FormView control
// that contains the button clicked.
FormView employeesFormView = (FormView)sender;
// Use the Row property to retrieve the data row.
FormViewRow row = employeesFormView.Row;
// Retrieve the FirstNameLabel and LastNameLabel Label controls
// from the data row.
Label firstNameLabel = (Label)row.FindControl("FirstNameLabel");
Label lastNameLabel = (Label)row.FindControl("LastNameLabel");
if (firstNameLabel != null && lastNameLabel != null)
{
// Display the employee's name.
MessageLabel.Text = firstNameLabel.Text + " " +
lastNameLabel.Text;
}
}
}
void EmployeesFormView_PageIndexChanged(Object sender, EventArgs e)
{
// Clear the message label when the user navigates to
// a different record.
MessageLabel.Text = "";
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>FormViewCommandEventHandler Example</title>
</head>
<body>
<form id="form1" runat="server">
<h3>FormViewCommandEventHandler Example</h3>
<!-- Use a PlaceHolder control as the container for the -->
<!-- dynamically generated FormView control. -->
<asp:placeholder id="FormViewPlaceHolder"
runat="server"/>
<br/><br/>
<asp:label id="MessageLabel"
forecolor="Red"
runat="server"/>
<!-- This example uses Microsoft SQL Server and connects -->
<!-- to the Northwind sample database. Use an ASP.NET -->
<!-- expression to retrieve the connection string value -->
<!-- from the Web.config file. -->
<asp:sqldatasource id="EmployeeSource"
selectcommand="Select [EmployeeID], [LastName], [FirstName] From [Employees]"
connectionstring="<%$ ConnectionStrings:NorthWindConnectionString%>"
runat="server"/>
</form>
</body>
</html>
<%@ page language="VB" %>
<%@ import namespace="System.Data"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
' To dynamically create a template for a FormView control,
' you must create a custom template class to represent
' the template. This template class represents the item
' template for a FormView control.
Private NotInheritable Class EmployeeTemplate
Implements ITemplate
' When implementing the ITemplate interface, you must
' implement the InstantiateIn method. The FormView
' control calls this method to create the template's
' content.
Sub InstantiateIn(ByVal container As Control) Implements ITemplate.InstantiateIn
' Create the child controls contained in the template.
' For this example, the item template displays the
' FirstName and LastName fields from the data source.
' To support data-binding, create event handlers
' for the DataBinding event of each child control.
' The event handlers must bind the appropriate value
' to each control.
Dim firstNameLabel As New Label()
firstNameLabel.ID = "FirstNameLabel"
AddHandler firstNameLabel.DataBinding, AddressOf FirstNameLabel_DataBinding
Dim nameLineBreak As New LiteralControl("<br/>")
Dim buttonLineBreak As New LiteralControl("<br/>")
Dim lastNameLabel As New Label()
lastNameLabel.ID = "LastNameLabel"
AddHandler lastNameLabel.DataBinding, AddressOf LastNameLabel_DataBinding
' Create a custom button control to display in the item
' template. When a button within a FormView control is
' clicked, the ItemCommand event is raised. The ItemCommand
' event is used to handle the clicking of this button.
Dim displayButton As New Button()
displayButton.ID = "AddButton"
displayButton.CommandName = "Display"
displayButton.Text = "Display Employee"
' Add the controls to the Controls collection of the
' container control.
container.Controls.Add(firstNameLabel)
container.Controls.Add(nameLineBreak)
container.Controls.Add(lastNameLabel)
container.Controls.Add(buttonLineBreak)
container.Controls.Add(displayButton)
End Sub
' This event handler binds the value of the FirstName field
' to the FirstNameLabel Label control displayed in the template.
Private Sub FirstNameLabel_DataBinding(ByVal sender As Object, ByVal e As EventArgs)
' Use the sender parameter to retrieve the Label control
' being bound to data.
Dim firstNameLabelControl As Label = CType(sender, Label)
' Retrieve the value to bind to the Label control. First,
' use the NamingContainer property to retrieve the parent
' control of the Label control. In this example, the parent
' control is the FormView control.
Dim formViewContainer As FormView = CType(firstNameLabelControl.NamingContainer, FormView)
' Get the data item bound to the FormView control.
Dim rowView As DataRowView = CType(formViewContainer.DataItem, DataRowView)
' Use the data item to retrieve the value of the FirstName field.
' Set the Text property of the Label control to this value.
firstNameLabelControl.Text = rowView("FirstName").ToString()
End Sub
' This event handler binds the value of the LastName field
' to the LastNameLabel Label control displayed in the template.
Private Sub LastNameLabel_DataBinding(ByVal sender As Object, ByVal e As EventArgs)
' Use the sender parameter to retrieve the Label control
' being bound to data.
Dim lastNameLabelControl As Label = CType(sender, Label)
' Retrieve the value to bind to the Label control. First,
' use the NamingContainer property to retrieve the parent
' control of the Label control. In this example, the parent
' control is the FormView control.
Dim formViewContainer As FormView = CType(lastNameLabelControl.NamingContainer, FormView)
' Get the data item bound to the FormView control.
Dim rowView As DataRowView = CType(formViewContainer.DataItem, DataRowView)
' Use the data item to retrieve the value of the LastName field.
' Set the Text property of the Label control to this value.
lastNameLabelControl.Text = rowView("LastName").ToString()
End Sub
End Class
Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
' Create a new FormView object.
Dim employeesFormView As New FormView()
' Set the FormView object's properties.
employeesFormView.ID = "EmployeesFormView"
employeesFormView.DataSourceID = "EmployeeSource"
employeesFormView.AllowPaging = True
employeesFormView.HeaderText = "Employee Name"
' Programmatically register the event handlers for the
' FormView control.
AddHandler employeesFormView.ItemCommand, AddressOf EmployeesFormView_ItemCommand
AddHandler employeesFormView.PageIndexChanged, AddressOf EmployeesFormView_PageIndexChanged
' Create the dynamic template using the custom template class.
employeesFormView.ItemTemplate = New EmployeeTemplate()
' Add the FormView object to the Controls collection
' of the PlaceHolder control.
FormViewPlaceHolder.Controls.Add(employeesFormView)
End Sub
Sub EmployeesFormView_ItemCommand(ByVal sender As Object, ByVal e As FormViewCommandEventArgs)
' The ItemCommand event is raised when any button within
' the FormView control is clicked. Use the CommandName property
' to determine which button was clicked.
If e.CommandName = "Display" Then
' Use the sender parameter to get the FormView control
' that contains the button clicked.
Dim employeesFormView As FormView = CType(sender, FormView)
' Use the Row property to retrieve the data row.
Dim row As FormViewRow = employeesFormView.Row
' Retrieve the FirstNameLabel and LastNameLabel Label controls
' from the data row.
Dim firstNameLabel As Label = CType(row.FindControl("FirstNameLabel"), Label)
Dim lastNameLabel As Label = CType(row.FindControl("LastNameLabel"), Label)
If firstNameLabel IsNot Nothing And lastNameLabel IsNot Nothing Then
' Display the employee's name.
MessageLabel.Text = firstNameLabel.Text & " " & _
lastNameLabel.Text()
End If
End If
End Sub
Sub EmployeesFormView_PageIndexChanged(ByVal sender As Object, ByVal e As EventArgs)
' Clear the message label when the user navigates to
' a different record.
MessageLabel.Text = ""
End Sub
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>FormViewCommandEventHandler Example</title>
</head>
<body>
<form id="form1" runat="server">
<h3>FormViewCommandEventHandler Example</h3>
<!-- Use a PlaceHolder control as the container for the -->
<!-- dynamically generated FormView control. -->
<asp:placeholder id="FormViewPlaceHolder"
runat="server"/>
<br/><br/>
<asp:label id="MessageLabel"
forecolor="Red"
runat="server"/>
<!-- This example uses Microsoft SQL Server and connects -->
<!-- to the Northwind sample database. Use an ASP.NET -->
<!-- expression to retrieve the connection string value -->
<!-- from the Web.config file. -->
<asp:sqldatasource id="EmployeeSource"
selectcommand="Select [EmployeeID], [LastName], [FirstName] From [Employees]"
connectionstring="<%$ ConnectionStrings:NorthWindConnectionString%>"
runat="server"/>
</form>
</body>
</html>
以下示例演示如何以声明方式向 控件的 FormView 事件添加FormViewCommandEventHandler委托ItemCommand。
<%@ page language="C#" %>
<%@ import namespace="System.Data"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
void EmployeesFormView_ItemCommand(Object sender, FormViewCommandEventArgs e)
{
// The ItemCommand event is raised when any button within
// the FormView control is clicked. Use the CommandName property
// to determine which button was clicked.
if (e.CommandName == "Display")
{
// Use the Row property to retrieve the data row.
FormViewRow row = EmployeesFormView.Row;
// Retrieve the FirstNameLabel and LastNameLabel Label controls
// from data row.
Label firstNameLabel = (Label)row.FindControl("FirstNameLabel");
Label lastNameLabel = (Label)row.FindControl("LastNameLabel");
if (firstNameLabel != null && lastNameLabel != null)
{
// Display the employee's name.
MessageLabel.Text = firstNameLabel.Text + " " +
lastNameLabel.Text;
}
}
}
void EmployeesFormView_PageIndexChanged(Object sender, EventArgs e)
{
// Clear the message label when the user navigates to
// a different record.
MessageLabel.Text = "";
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>FormViewCommandEventHandler Example</title>
</head>
<body>
<form id="form1" runat="server">
<h3>FormViewCommandEventHandler Example</h3>
<!-- Use a PlaceHolder control as the container for the -->
<!-- dynamically generated FormView control. -->
<asp:formview id="EmployeesFormView"
datasourceid="EmployeeSource"
allowpaging="True"
headertext="Employee Name"
onitemcommand="EmployeesFormView_ItemCommand"
onpageindexchanged="EmployeesFormView_PageIndexChanged"
runat="server">
<itemtemplate>
<asp:label id="FirstNameLabel"
text='<%# Eval("FirstName") %>'
runat="server"/>
<br/>
<asp:label id="LastNameLabel"
text='<%# Eval("LastName") %>'
runat="server"/>
<br/>
<asp:button
id="DisplayButton"
text="Display Employee"
commandname="Display"
runat="server"/>
</itemtemplate>
</asp:formview>
<br/><br/>
<asp:label id="MessageLabel"
forecolor="Red"
runat="server"/>
<!-- This example uses Microsoft SQL Server and connects -->
<!-- to the Northwind sample database. Use an ASP.NET -->
<!-- expression to retrieve the connection string value -->
<!-- from the Web.config file. -->
<asp:sqldatasource id="EmployeeSource"
selectcommand="Select [EmployeeID], [LastName], [FirstName] From [Employees]"
connectionstring="<%$ ConnectionStrings:NorthWindConnectionString%>"
runat="server"/>
</form>
</body>
</html>
<%@ page language="VB" %>
<%@ import namespace="System.Data"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
Sub EmployeesFormView_ItemCommand(ByVal sender As Object, ByVal e As FormViewCommandEventArgs) Handles EmployeesFormView.ItemCommand
' The ItemCommand event is raised when any button within
' the FormView control is clicked. Use the CommandName property
' to determine which button was clicked.
If e.CommandName = "Display" Then
' Use the Row property to retrieve the data row.
Dim row As FormViewRow = EmployeesFormView.Row
' Retrieve the FirstNameLabel and LastNameLabel Label controls
' from data row.
Dim firstNameLabel As Label = CType(row.FindControl("FirstNameLabel"), Label)
Dim lastNameLabel As Label = CType(row.FindControl("LastNameLabel"), Label)
If firstNameLabel IsNot Nothing And lastNameLabel IsNot Nothing Then
' Display the employee's name.
MessageLabel.Text = firstNameLabel.Text & " " & _
lastNameLabel.Text()
End If
End If
End Sub
Sub EmployeesFormView_PageIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles EmployeesFormView.PageIndexChanged
' Clear the message label when the user navigates to
' a different record.
MessageLabel.Text = ""
End Sub
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>FormViewCommandEventHandler Example</title>
</head>
<body>
<form id="form1" runat="server">
<h3>FormViewCommandEventHandler Example</h3>
<!-- Use a PlaceHolder control as the container for the -->
<!-- dynamically generated FormView control. -->
<asp:formview id="EmployeesFormView"
datasourceid="EmployeeSource"
allowpaging="True"
headertext="Employee Name"
runat="server">
<itemtemplate>
<asp:label id="FirstNameLabel"
text='<%# Eval("FirstName") %>'
runat="server"/>
<br/>
<asp:label id="LastNameLabel"
text='<%# Eval("LastName") %>'
runat="server"/>
<br/>
<asp:button
id="DisplayButton"
text="Display Employee"
commandname="Display"
runat="server"/>
</itemtemplate>
</asp:formview>
<br/><br/>
<asp:label id="MessageLabel"
forecolor="Red"
runat="server"/>
<!-- This example uses Microsoft SQL Server and connects -->
<!-- to the Northwind sample database. Use an ASP.NET -->
<!-- expression to retrieve the connection string value -->
<!-- from the Web.config file. -->
<asp:sqldatasource id="EmployeeSource"
selectcommand="Select [EmployeeID], [LastName], [FirstName] From [Employees]"
connectionstring="<%$ ConnectionStrings:NorthWindConnectionString%>"
runat="server"/>
</form>
</body>
</html>
注解
单击 ItemCommand 控件中的 FormView 按钮时,将引发 事件。 这允许你提供一个事件处理方法,该方法在发生此事件时执行自定义例程。
控件中的 FormView 按钮还可以调用控件的某些内置功能。 若要执行这些操作之一,请将按钮的 属性设置为 CommandName
下表中的值之一。
CommandName 值 | 说明 |
---|---|
“取消” | 取消编辑或插入操作,并将 FormView 控件返回到 属性指定的 DefaultMode 模式。 引发 ModeChanged 和 ModeChanging 事件。 |
“Delete” | 删除当前记录。 引发 ItemDeleted 和 ItemDeleting 事件。 |
“编辑” | 将 FormView 控件置于编辑模式。 引发 ModeChanged 和 ModeChanging 事件。 |
“插入” | 将当前记录插入到数据源中。 引发 ItemInserted 和 ItemInserting 事件。 |
“新建” | 将 FormView 控件置于插入模式。 引发 ModeChanged 和 ModeChanging 事件。 |
“Page” | 执行分页操作。
CommandArgument 将按钮的 属性设置为“First”、“Last”、“Next”、“Prev”或页码,以指定要执行的分页操作的类型。 引发 PageIndexChanged 和 PageIndexChanging 事件。 |
“Update” | 更新数据源中的当前记录。 引发 ItemUpdated 和 ItemUpdating 事件。 |
尽管在 ItemCommand 单击上一表中列出的按钮时会引发 事件,但建议你为操作处理表中列出的事件。
创建 FormViewCommandEventHandler 委托时,需要标识将处理该事件的方法。 若要将事件与事件处理程序关联,请将该委托的一个实例添加到事件中。 除非移除了该委托,否则每当发生该事件时就会调用事件处理程序。 有关事件处理程序委托的详细信息,请参阅 处理和引发事件。
扩展方法
GetMethodInfo(Delegate) |
获取指示指定委托表示的方法的对象。 |