GridView.RowCommand Ereignis
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Tritt ein, wenn in einem GridView-Steuerelement auf eine Schaltfläche geklickt wird.
public:
event System::Web::UI::WebControls::GridViewCommandEventHandler ^ RowCommand;
public event System.Web.UI.WebControls.GridViewCommandEventHandler RowCommand;
member this.RowCommand : System.Web.UI.WebControls.GridViewCommandEventHandler
Public Custom Event RowCommand As GridViewCommandEventHandler
Ereignistyp
Beispiele
Für dieses Thema steht ein Visual Studio-Websiteprojekt mit Quellcode zur Verfügung: Download.
Im folgenden Beispiel wird veranschaulicht, wie Sie mithilfe des RowCommand Ereignisses den Namen eines Kunden aus einem GridView Steuerelement zu einem ListBox Steuerelement hinzufügen, wenn auf die Schaltfläche Hinzufügen einer Zeile geklickt wird.
<%@ Page language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
void ContactsGridView_RowCommand(Object sender, GridViewCommandEventArgs e)
{
// If multiple buttons are used in a GridView control, use the
// CommandName property to determine which button was clicked.
if(e.CommandName=="Add")
{
// Convert the row index stored in the CommandArgument
// property to an Integer.
int index = Convert.ToInt32(e.CommandArgument);
// Retrieve the row that contains the button clicked
// by the user from the Rows collection.
GridViewRow row = ContactsGridView.Rows[index];
// Create a new ListItem object for the contact in the row.
ListItem item = new ListItem();
item.Text = Server.HtmlDecode(row.Cells[2].Text) + " " +
Server.HtmlDecode(row.Cells[3].Text);
// If the contact is not already in the ListBox, add the ListItem
// object to the Items collection of the ListBox control.
if (!ContactsListBox.Items.Contains(item))
{
ContactsListBox.Items.Add(item);
}
}
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>GridView RowCommand Example</title>
</head>
<body>
<form id="form1" runat="server">
<h3>GridView RowCommand Example</h3>
<table width="100%">
<tr>
<td style="width:50%">
<asp:gridview id="ContactsGridView"
datasourceid="ContactsSource"
allowpaging="true"
autogeneratecolumns="false"
onrowcommand="ContactsGridView_RowCommand"
runat="server">
<columns>
<asp:buttonfield buttontype="Link"
commandname="Add"
text="Add"/>
<asp:boundfield datafield="ContactID"
headertext="Contact ID"/>
<asp:boundfield datafield="FirstName"
headertext="First Name"/>
<asp:boundfield datafield="LastName"
headertext="Last Name"/>
</columns>
</asp:gridview>
</td>
<td style="vertical-align:top; width:50%">
Contacts: <br/>
<asp:listbox id="ContactsListBox"
runat="server" Height="200px" Width="200px"/>
</td>
</tr>
</table>
<!-- This example uses Microsoft SQL Server and connects -->
<!-- to the AdventureWorks sample database. Use an ASP.NET -->
<!-- expression to retrieve the connection string value -->
<!-- from the Web.config file. -->
<asp:sqldatasource id="ContactsSource"
selectcommand="Select [ContactID], [FirstName], [LastName] From Person.Contact"
connectionstring="<%$ ConnectionStrings:AdventureWorks_DataConnectionString%>"
runat="server"/>
</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">
<script runat="server">
Sub ContactsGridView_RowCommand(ByVal sender As Object, ByVal e As GridViewCommandEventArgs)
' If multiple buttons are used in a GridView control, use the
' CommandName property to determine which button was clicked.
If e.CommandName = "Add" Then
' Convert the row index stored in the CommandArgument
' property to an Integer.
Dim index As Integer = Convert.ToInt32(e.CommandArgument)
' Retrieve the row that contains the button clicked
' by the user from the Rows collection.
Dim row As GridViewRow = ContactsGridView.Rows(index)
' Create a new ListItem object for the contact in the row.
Dim item As New ListItem()
item.Text = Server.HtmlDecode(row.Cells(2).Text) & " " & _
Server.HtmlDecode(row.Cells(3).Text)
' If the contact is not already in the ListBox, add the ListItem
' object to the Items collection of the ListBox control.
If Not ContactsListBox.Items.Contains(item) Then
ContactsListBox.Items.Add(item)
End If
End If
End Sub
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
<title>GridView RowCommand Example</title>
</head>
<body>
<form id="form1" runat="server">
<h3>GridView RowCommand Example</h3>
<table width="100%">
<tr>
<td style="width:50%">
<asp:gridview id="ContactsGridView"
datasourceid="ContactsSource"
allowpaging="true"
autogeneratecolumns="false"
onrowcommand="ContactsGridView_RowCommand"
runat="server">
<columns>
<asp:buttonfield buttontype="Link"
commandname="Add"
text="Add"/>
<asp:boundfield datafield="ContactID"
headertext="Contact ID"/>
<asp:boundfield datafield="FirstName"
headertext="First Name"/>
<asp:boundfield datafield="LastName"
headertext="Last Name"/>
</columns>
</asp:gridview>
</td>
<td style="vertical-align:top; width:50%">
Contacts: <br/>
<asp:listbox id="ContactsListBox"
runat="server" Height="200px" Width="200px"/>
</td>
</tr>
</table>
<!-- This example uses Microsoft SQL Server and connects -->
<!-- to the AdventureWorks sample database. Use an ASP.NET -->
<!-- expression to retrieve the connection string value -->
<!-- from the Web.config file. -->
<asp:sqldatasource id="ContactsSource"
selectcommand="Select [ContactID], [FirstName], [LastName] From Person.Contact"
connectionstring="<%$ ConnectionStrings:AdventureWorks_DataConnectionString%>"
runat="server"/>
</form>
</body>
</html>
Im folgenden Beispiel wird veranschaulicht, wie Sie das RowCommand Ereignis verwenden, um den Preis eines Produkts zu aktualisieren, wenn auf die Schaltfläche einer Zeile geklickt wird. In diesem Beispiel ist die Pagingfunktion für das GridView Steuerelement aktiviert und legt die CommandArgument Eigenschaft des Button Steuerelements auf den entsprechenden Zeilenindex fest.
<%@ Page language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
void ProductsGridView_RowCommand(Object sender, GridViewCommandEventArgs e)
{
// If multiple buttons are used in a GridView control, use the
// CommandName property to determine which button was clicked.
if(e.CommandName=="Increase")
{
// Convert the row index stored in the CommandArgument
// property to an Integer.
int index = Convert.ToInt32(e.CommandArgument);
// Retrieve the row that contains the button clicked
// by the user from the Rows collection.
GridViewRow row = ProductsGridView.Rows[index];
// Calculate the new price.
Label listPriceTextBox = (Label)row.FindControl("PriceLabel");
listPriceTextBox.Text = (Convert.ToDouble(listPriceTextBox.Text) * 1.05).ToString();
// Update the row.
ProductsGridView.UpdateRow(index, false);
}
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>GridView RowCommand Example</title>
</head>
<body>
<form id="form1" runat="server">
<h3>GridView RowCommand Example</h3>
<asp:GridView id="ProductsGridView"
DataSourceID="ProductsDataSource"
DataKeyNames="ProductID"
AllowPaging="True"
OnRowCommand="ProductsGridView_RowCommand"
AutoGenerateColumns="False"
runat="server">
<Columns>
<asp:BoundField DataField="Name" HeaderText="Product Name" />
<asp:BoundField DataField="ProductNumber" HeaderText="Product Number" />
<asp:TemplateField HeaderText="Price">
<ItemTemplate>
<asp:Label ID="PriceLabel" runat="server"
Text='<%# Bind("ListPrice") %>'>
</asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>
<asp:Button runat="server" ID="IncreaseButton"
Text="Increase Price 5%"
CommandName="Increase"
CommandArgument="<%# ((GridViewRow) Container).RowIndex %>" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<!-- This example uses Microsoft SQL Server and connects -->
<!-- to the AdventureWorks sample database. Use an ASP.NET -->
<!-- expression to retrieve the connection string value -->
<!-- from the Web.config file. -->
<asp:SqlDataSource id="ProductsDataSource"
SelectCommand="SELECT [ProductID], [Name], [ProductNumber], [ListPrice]
FROM Production.Product
WHERE ListPrice <> 0"
UpdateCommand="UPDATE Production.Product SET [ListPrice] = @ListPrice
WHERE [ProductID] = @ProductID"
ConnectionString="<%$ ConnectionStrings:AdventureWorks_DataConnectionString %>"
runat="server" />
</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">
<script runat="server">
Sub ProductsGridView_RowCommand(ByVal sender As Object, ByVal e As GridViewCommandEventArgs)
' If multiple buttons are used in a GridView control, use the
' CommandName property to determine which button was clicked.
If e.CommandName = "Increase" Then
' Convert the row index stored in the CommandArgument
' property to an Integer.
Dim index = Convert.ToInt32(e.CommandArgument)
' Retrieve the row that contains the button clicked
' by the user from the Rows collection.
Dim row = ProductsGridView.Rows(index)
' Calculate the new price.
Dim listPriceTextBox = CType(row.FindControl("PriceLabel"), Label)
listPriceTextBox.Text = (Convert.ToDouble(listPriceTextBox.Text) * 1.05).ToString()
' Update the row.
ProductsGridView.UpdateRow(index, False)
End If
End Sub
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>GridView RowCommand Example</title>
</head>
<body>
<form id="form1" runat="server">
<h3>GridView RowCommand Example</h3>
<asp:GridView id="ProductsGridView"
DataSourceID="ProductsDataSource"
DataKeyNames="ProductID"
AllowPaging="True"
OnRowCommand="ProductsGridView_RowCommand"
AutoGenerateColumns="False"
runat="server">
<Columns>
<asp:BoundField DataField="Name" HeaderText="Product Name" />
<asp:BoundField DataField="ProductNumber" HeaderText="Product Number" />
<asp:TemplateField HeaderText="Price">
<ItemTemplate>
<asp:Label ID="PriceLabel" runat="server"
Text='<%# Bind("ListPrice") %>'>
</asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>
<asp:Button runat="server" ID="IncreaseButton"
Text="Increase Price 5%"
CommandName="Increase"
CommandArgument="<%# CType(Container, GridViewRow).RowIndex %>" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<!-- This example uses Microsoft SQL Server and connects -->
<!-- to the AdventureWorks sample database. Use an ASP.NET -->
<!-- expression to retrieve the connection string value -->
<!-- from the Web.config file. -->
<asp:SqlDataSource id="ProductsDataSource"
SelectCommand="SELECT [ProductID], [Name], [ProductNumber], [ListPrice]
FROM Production.Product
WHERE ListPrice <> 0"
UpdateCommand="UPDATE Production.Product SET [ListPrice] = @ListPrice
WHERE [ProductID] = @ProductID"
ConnectionString="<%$ ConnectionStrings:AdventureWorks_DataConnectionString %>"
runat="server" />
</form>
</body>
</html>
Hinweise
Das RowCommand Ereignis wird ausgelöst, wenn im GridView Steuerelement auf eine Schaltfläche geklickt wird. Dadurch können Sie eine Ereignisbehandlungsmethode bereitstellen, die eine benutzerdefinierte Routine ausführt, wenn dieses Ereignis auftritt.
Schaltflächen in einem GridView Steuerelement können auch einige der integrierten Funktionen des Steuerelements aufrufen. Um einen dieser Vorgänge auszuführen, legen Sie die CommandName
Eigenschaft einer Schaltfläche auf einen der Werte in der folgenden Tabelle fest.
Wert vom Typ CommandName |
BESCHREIBUNG |
---|---|
"Abbrechen" | Bricht einen Bearbeitungsvorgang ab und gibt das Steuerelement in den GridView schreibgeschützten Modus zurück. Löst das RowCancelingEdit-Ereignis aus. |
"Löschen" | Löscht den aktuellen Datensatz. Löst die RowDeleting Ereignisse und RowDeleted aus. |
"Bearbeiten" | Versetzt den aktuellen Datensatz in den Bearbeitungsmodus. Löst das RowEditing-Ereignis aus. |
"Seite" | Führt einen Pagingvorgang aus. Legt die CommandArgument Eigenschaft der Schaltfläche auf "First", "Last", "Next", "Prev" oder eine Seitenzahl fest, um den Typ des auszuführenden Pagingvorgangs anzugeben. Löst die PageIndexChanging Ereignisse und PageIndexChanged aus. |
„Auswählen“ | Wählt den aktuellen Datensatz aus. Löst die SelectedIndexChanging Ereignisse und SelectedIndexChanged aus. |
"Sortieren" | Sortiert das GridView Steuerelement. Löst die Sorting Ereignisse und Sorted aus. |
"Aktualisieren" | Aktualisiert den aktuellen Datensatz in der Datenquelle. Löst die RowUpdating Ereignisse und RowUpdated aus. |
Obwohl das RowCommand Ereignis ausgelöst wird, wenn auf eine in der vorherigen Tabelle aufgeführte Schaltfläche geklickt wird, wird empfohlen, die in der Tabelle aufgeführten Ereignisse für den Vorgang zu verwenden.
Ein GridViewCommandEventArgs -Objekt wird an die Ereignisbehandlungsmethode übergeben, mit der Sie den Befehlsnamen und das Befehlsargument der schaltfläche bestimmen können, auf die geklickt wurde.
Hinweis
Um den Index der Zeile zu bestimmen, die das Ereignis ausgelöst hat, verwenden Sie die CommandArgument -Eigenschaft des Ereignisarguments, das an das Ereignis übergeben wird. Die ButtonField -Klasse füllt die CommandArgument -Eigenschaft automatisch mit dem entsprechenden Indexwert auf. Für andere Befehlsschaltflächen müssen Sie die CommandArgument Eigenschaft der Befehlsschaltfläche manuell festlegen. Sie können z. B. auf CommandArgument<%# Container.DataItemIndex %>
festlegen, wenn für das GridView Steuerelement kein Paging aktiviert ist.
Weitere Informationen zum Behandeln von Ereignissen finden Sie unter behandeln und Auslösen von Ereignissen.