EditCommandColumn Klasse
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.
Ein spezieller Spaltentyp für das DataGrid-Steuerelement, das die Edit
-Schaltflächen zum Bearbeiten von Datenelementen in jeder Zeile enthält.
public ref class EditCommandColumn : System::Web::UI::WebControls::DataGridColumn
public class EditCommandColumn : System.Web.UI.WebControls.DataGridColumn
type EditCommandColumn = class
inherit DataGridColumn
Public Class EditCommandColumn
Inherits DataGridColumn
- Vererbung
Beispiele
Im folgenden Codebeispiel wird veranschaulicht, wie einem Steuerelement ein EditCommandColumnDataGrid -Objekt hinzugefügt wird.
<%@ Page Language="C#" AutoEventWireup="True" %>
<%@ Import Namespace="System.Data" %>
<!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" >
<script runat="server">
// The Cart and CartView objects temporarily store the data source
// for the DataGrid control while the page is being processed.
DataTable Cart = new DataTable();
DataView CartView;
void Page_Load(Object sender, EventArgs e)
{
// With a database, use an select query to retrieve the data. Because
// the data source in this example is an in-memory DataTable, retrieve
// the data from session state if it exists; otherwise, create the data
// source.
GetSource();
// The DataGrid control maintains state between posts to the server;
// it only needs to be bound to a data source the first time the page
// is loaded or when the data source is updated.
if (!IsPostBack)
{
BindGrid();
}
}
void ItemsGrid_Edit(Object sender, DataGridCommandEventArgs e)
{
// Set the EditItemIndex property to the index of the item clicked
// in the DataGrid control to enable editing for that item. Be sure
// to rebind the DateGrid to the data source to refresh the control.
ItemsGrid.EditItemIndex = e.Item.ItemIndex;
BindGrid();
}
void ItemsGrid_Cancel(Object sender, DataGridCommandEventArgs e)
{
// Set the EditItemIndex property to -1 to exit editing mode.
// Be sure to rebind the DateGrid to the data source to refresh
// the control.
ItemsGrid.EditItemIndex = -1;
BindGrid();
}
void ItemsGrid_Update(Object sender, DataGridCommandEventArgs e)
{
// Retrieve the text boxes that contain the values to update.
// For bound columns, the edited value is stored in a TextBox.
// The TextBox is the 0th control in a cell's Controls collection.
// Each cell in the Cells collection of a DataGrid item represents
// a column in the DataGrid control.
TextBox qtyText = (TextBox)e.Item.Cells[3].Controls[0];
TextBox priceText = (TextBox)e.Item.Cells[4].Controls[0];
// Retrieve the updated values.
String item = e.Item.Cells[2].Text;
String qty = qtyText.Text;
String price = priceText.Text;
DataRow dr;
// With a database, use an update command to update the data.
// Because the data source in this example is an in-memory
// DataTable, delete the old row and replace it with a new one.
// Remove the old entry and clear the row filter.
CartView.RowFilter = "Item='" + item + "'";
if (CartView.Count > 0)
{
CartView.Delete(0);
}
CartView.RowFilter = "";
// ***************************************************************
// Insert data validation code here. Be sure to validate the
// values entered by the user before converting to the appropriate
// data types and updating the data source.
// ***************************************************************
// Add the new entry.
dr = Cart.NewRow();
dr[0] = Convert.ToInt32(qty);
dr[1] = item;
// If necessary, remove the '$' character from the price before
// converting it to a Double.
if(price[0] == '$')
{
dr[2] = Convert.ToDouble(price.Substring(1));
}
else
{
dr[2] = Convert.ToDouble(price);
}
Cart.Rows.Add(dr);
// Set the EditItemIndex property to -1 to exit editing mode.
// Be sure to rebind the DateGrid to the data source to refresh
// the control.
ItemsGrid.EditItemIndex = -1;
BindGrid();
}
void BindGrid()
{
// Set the data source and bind to the Data Grid control.
ItemsGrid.DataSource = CartView;
ItemsGrid.DataBind();
}
void GetSource()
{
// For this example, the data source is a DataTable that is stored
// in session state. If the data source does not exist, create it;
// otherwise, load the data.
if (Session["ShoppingCart"] == null)
{
// Create the sample data.
DataRow dr;
// Define the columns of the table.
Cart.Columns.Add(new DataColumn("Qty", typeof(Int32)));
Cart.Columns.Add(new DataColumn("Item", typeof(String)));
Cart.Columns.Add(new DataColumn("Price", typeof(Double)));
// Store the table in session state to persist its values
// between posts to the server.
Session["ShoppingCart"] = Cart;
// Populate the DataTable with sample data.
for (int i = 1; i <= 9; i++)
{
dr = Cart.NewRow();
if (i % 2 != 0)
{
dr[0] = 2;
}
else
{
dr[0] = 1;
}
dr[1] = "Item " + i.ToString();
dr[2] = (1.23 * (i + 1));
Cart.Rows.Add(dr);
}
}
else
{
// Retrieve the sample data from session state.
Cart = (DataTable)Session["ShoppingCart"];
}
// Create a DataView and specify the field to sort by.
CartView = new DataView(Cart);
CartView.Sort="Item";
return;
}
void ItemsGrid_Command(Object sender, DataGridCommandEventArgs e)
{
switch(((LinkButton)e.CommandSource).CommandName)
{
case "Delete":
DeleteItem(e);
break;
// Add other cases here, if there are multiple ButtonColumns in
// the DataGrid control.
default:
// Do nothing.
break;
}
}
void DeleteItem(DataGridCommandEventArgs e)
{
// e.Item is the table row where the command is raised. For bound
// columns, the value is stored in the Text property of a TableCell.
TableCell itemCell = e.Item.Cells[2];
string item = itemCell.Text;
// Remove the selected item from the data source.
CartView.RowFilter = "Item='" + item + "'";
if (CartView.Count > 0)
{
CartView.Delete(0);
}
CartView.RowFilter = "";
// Rebind the data source to refresh the DataGrid control.
BindGrid();
}
</script>
<head runat="server">
<title>DataGrid Editing Example</title>
</head>
<body>
<form id="form1" runat="server">
<h3>DataGrid Editing Example</h3>
<asp:DataGrid id="ItemsGrid"
BorderColor="black"
BorderWidth="1"
CellPadding="3"
OnEditCommand="ItemsGrid_Edit"
OnCancelCommand="ItemsGrid_Cancel"
OnUpdateCommand="ItemsGrid_Update"
OnItemCommand="ItemsGrid_Command"
AutoGenerateColumns="false"
runat="server">
<HeaderStyle BackColor="#aaaadd">
</HeaderStyle>
<Columns>
<asp:EditCommandColumn
EditText="Edit"
CancelText="Cancel"
UpdateText="Update"
HeaderText="Edit item">
<ItemStyle Wrap="False">
</ItemStyle>
<HeaderStyle Wrap="False">
</HeaderStyle>
</asp:EditCommandColumn>
<asp:ButtonColumn
HeaderText="Delete item"
ButtonType="LinkButton"
Text="Delete"
CommandName="Delete"/>
<asp:BoundColumn HeaderText="Item"
ReadOnly="True"
DataField="Item"/>
<asp:BoundColumn HeaderText="Quantity"
DataField="Qty"/>
<asp:BoundColumn HeaderText="Price"
DataField="Price"
DataFormatString="{0:c}"/>
</Columns>
</asp:DataGrid>
</form>
</body>
</html>
<%@ Page Language="VB" AutoEventWireup="True" %>
<%@ Import Namespace="System.Data" %>
<!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" >
<script runat="server">
' The Cart and CartView objects temporarily store the data source
' for the DataGrid control while the page is being processed.
Dim Cart As DataTable = New DataTable()
Dim CartView As DataView
Sub Page_Load(sender As Object, e As EventArgs)
' With a database, use an select query to retrieve the data. Because
' the data source in this example is an in-memory DataTable, retrieve
' the data from session state if it exists; otherwise create the data
' source.
GetSource()
' The DataGrid control maintains state between posts to the server;
' it only needs to be bound to a data source the first time the page
' is loaded or when the data source is updated.
If Not IsPostBack Then
BindGrid()
End If
End Sub
Sub ItemsGrid_Edit(sender As Object, e As DataGridCommandEventArgs)
' Set the EditItemIndex property to the index of the item clicked
' in the DataGrid control to enable editing for that item. Be sure
' to rebind the DateGrid to the data source to refresh the control.
ItemsGrid.EditItemIndex = e.Item.ItemIndex
BindGrid()
End Sub
Sub ItemsGrid_Cancel(sender As Object, e As DataGridCommandEventArgs)
' Set the EditItemIndex property to -1 to exit editing mode.
' Be sure to rebind the DateGrid to the data source to refresh
' the control.
ItemsGrid.EditItemIndex = -1
BindGrid()
End Sub
Sub ItemsGrid_Update(sender As Object, e As DataGridCommandEventArgs)
' Retrieve the text boxes that contain the values to update.
' For bound columns, the edited value is stored in a TextBox.
' The TextBox is the 0th control in a cell's Controls collection.
' Each cell in the Cells collection of a DataGrid item represents
' a column in the DataGrid control.
Dim qtyText As TextBox = CType(e.Item.Cells(3).Controls(0), TextBox)
Dim priceText As TextBox = CType(e.Item.Cells(4).Controls(0), TextBox)
' Retrieve the updated values.
Dim item As String = e.Item.Cells(2).Text
Dim qty As String = qtyText.Text
Dim price As String = priceText.Text
Dim dr As DataRow
' With a database, use an update command to update the data.
' Because the data source in this example is an in-memory
' DataTable, delete the old row and replace it with a new one.
' Remove the old entry and clear the row filter.
CartView.RowFilter = "Item='" & item & "'"
If CartView.Count > 0 Then
CartView.Delete(0)
End If
CartView.RowFilter = ""
' ***************************************************************
' Insert data validation code here. Be sure to validate the
' values entered by the user before converting to the appropriate
' data types and updating the data source.
' ***************************************************************
' Add the new entry.
dr = Cart.NewRow()
dr(0) = Convert.ToInt32(qty)
dr(1) = item
' If necessary, remove the '$' character from the price before
' converting it to a Double.
If price.Chars(0) = "$" Then
dr(2) = Convert.ToDouble(price.Substring(1))
Else
dr(2) = Convert.ToDouble(price)
End If
Cart.Rows.Add(dr)
' Set the EditItemIndex property to -1 to exit editing mode.
' Be sure to rebind the DateGrid to the data source to refresh
' the control.
ItemsGrid.EditItemIndex = -1
BindGrid()
End Sub
Sub BindGrid()
' Set the data source and bind to the Data Grid control.
ItemsGrid.DataSource = CartView
ItemsGrid.DataBind()
End Sub
Sub GetSource()
' For this example, the data source is a DataTable that is stored
' in session state. If the data source does not exist, create it;
' otherwise, load the data.
If Session("ShoppingCart") Is Nothing Then
' Create the sample data.
Dim dr As DataRow
' Define the columns of the table.
Cart.Columns.Add(new DataColumn("Qty", GetType(Int32)))
Cart.Columns.Add(new DataColumn("Item", GetType(String)))
Cart.Columns.Add(new DataColumn("Price", GetType(Double)))
' Store the table in session state to persist its values
' between posts to the server.
Session("ShoppingCart") = Cart
' Populate the DataTable with sample data.
Dim i As Integer
For i = 1 To 9
dr = Cart.NewRow()
If (i Mod 2) <> 0 Then
dr(0) = 2
Else
dr(0) = 1
End If
dr(1) = "Item " & i.ToString()
dr(2) = (1.23 * (i + 1))
Cart.Rows.Add(dr)
Next i
Else
' Retrieve the sample data from session state.
Cart = CType(Session("ShoppingCart"), DataTable)
End If
' Create a DataView and specify the field to sort by.
CartView = New DataView(Cart)
CartView.Sort="Item"
Return
End Sub
Sub ItemsGrid_Command(sender As Object, e As DataGridCommandEventArgs)
Select (CType(e.CommandSource, LinkButton)).CommandName
Case "Delete"
DeleteItem(e)
' Add other cases here, if there are multiple ButtonColumns in
' the DataGrid control.
Case Else
' Do nothing.
End Select
End Sub
Sub DeleteItem(e As DataGridCommandEventArgs)
' e.Item is the table row where the command is raised. For bound
' columns, the value is stored in the Text property of a TableCell.
Dim itemCell As TableCell = e.Item.Cells(2)
Dim item As String = itemCell.Text
' Remove the selected item from the data source.
CartView.RowFilter = "Item='" & item + "'"
If CartView.Count > 0 Then
CartView.Delete(0)
End If
CartView.RowFilter = ""
' Rebind the data source to refresh the DataGrid control.
BindGrid()
End Sub
</script>
<head runat="server">
<title>DataGrid Editing Example</title>
</head>
<body>
<form id="form1" runat="server">
<h3>DataGrid Editing Example</h3>
<asp:DataGrid id="ItemsGrid"
BorderColor="black"
BorderWidth="1"
CellPadding="3"
OnEditCommand="ItemsGrid_Edit"
OnCancelCommand="ItemsGrid_Cancel"
OnUpdateCommand="ItemsGrid_Update"
OnItemCommand="ItemsGrid_Command"
AutoGenerateColumns="false"
runat="server">
<HeaderStyle BackColor="#aaaadd">
</HeaderStyle>
<Columns>
<asp:EditCommandColumn
EditText="Edit"
CancelText="Cancel"
UpdateText="Update"
HeaderText="Edit item">
<ItemStyle Wrap="False">
</ItemStyle>
<HeaderStyle Wrap="False">
</HeaderStyle>
</asp:EditCommandColumn>
<asp:ButtonColumn
HeaderText="Delete item"
ButtonType="LinkButton"
Text="Delete"
CommandName="Delete"/>
<asp:BoundColumn HeaderText="Item"
ReadOnly="True"
DataField="Item"/>
<asp:BoundColumn HeaderText="Quantity"
DataField="Qty"/>
<asp:BoundColumn HeaderText="Price"
DataField="Price"
DataFormatString="{0:c}"/>
</Columns>
</asp:DataGrid>
</form>
</body>
</html>
Hinweise
Verwenden Sie die EditCommandColumn -Klasse, um eine spezielle Spalte für das DataGrid Steuerelement zu erstellen, das die Edit
Schaltflächen , Update
und Cancel
für jede Datenzeile im Raster enthält. Mit diesen Schaltflächen können Sie die Werte einer Zeile im DataGrid Steuerelement bearbeiten.
Wenn keine Zeile ausgewählt ist, wird im EditCommandColumn Objekt für jede Datenzeile im DataGrid Steuerelement eine Edit
Schaltfläche angezeigt. Wenn auf die Edit
Schaltfläche für ein Element geklickt wird, wird das EditCommand Ereignis ausgelöst, und die Edit
Schaltfläche wird durch die Update
Schaltflächen und Cancel
ersetzt. Sie müssen Code bereitstellen, um das EditCommand Ereignis zu behandeln. Ein typischer Ereignishandler legt die EditItemIndex Eigenschaft auf die ausgewählte Zeile fest und bindet die Daten dann erneut an das DataGrid Steuerelement.
Hinweis
Sie müssen Werte für die CancelTextEigenschaften , EditTextund UpdateText angeben. Andernfalls werden die zugeordneten Schaltflächen nicht in angezeigt EditCommandColumn.
Die Schaltflächen in EditCommandColumn können so festgelegt werden, dass sie als Hyperlinks oder Drucktasten angezeigt werden, indem Sie die ButtonType -Eigenschaft festlegen.
Klicken auf die Update
oder Cancel
Schaltfläche löst die UpdateCommand oder CancelCommand Ereignis bzw. Sie müssen Code bereitstellen, um diese Ereignisse zu behandeln.
Ein typischer Handler für das UpdateCommand Ereignis aktualisiert die Daten, legt die EditItemIndex -Eigenschaft auf -1
fest (um die Auswahl des Elements aufzuheben) und anschließend die Daten erneut an das DataGrid Steuerelement zu binden.
Ein typischer Handler für das CancelCommand Ereignis legt die EditItemIndex -Eigenschaft auf -1
fest (um die Auswahl des Elements aufzuheben) und anschließend die Daten erneut an das DataGrid Steuerelement zu binden.
Achtung
Das EditCommandColumn -Objekt kann verwendet werden, um Benutzereingaben anzuzeigen, die möglicherweise ein böswilliges Clientskript enthalten. Überprüfen Sie alle Informationen, die von einem Client auf ausführbare Skripts, SQL-Anweisungen oder anderen Code gesendet werden, bevor Sie sie in Ihrer Anwendung anzeigen. Sie können Validierungssteuerelemente verwenden, um die Benutzereingabe zu überprüfen, bevor der Eingabetext in einem DataGrid Steuerelement angezeigt wird. ASP.NET bietet eine Funktion zur Überprüfung von Eingabeanforderungen zum Blockieren von Skripts und HTML in Benutzereingaben. Weitere Informationen finden Sie unter Sichern von Standardsteuerelementen, Vorgehensweise: Schutz vor Skript-Exploits in einer Webanwendung durch Anwenden von HTML-Codierung auf Zeichenfolgen und Überprüfen von Benutzereingaben in ASP.NET Webseiten.
Standardmäßig wird die Seitenüberprüfung durchgeführt, wenn auf eine Update
Schaltfläche im EditCommandColumn Steuerelement geklickt wird. Die Seitenüberprüfung bestimmt, ob die Eingabesteuerelemente, die einem Validierungssteuerelement auf der Seite zugeordnet sind, die Validierungsregeln, die vom Validierungssteuerelement angegeben werden, alle bestehen. Legen Sie die -Eigenschaft auf fest, um die CausesValidation Seitenüberprüfung zu false
verhindern.
Konstruktoren
EditCommandColumn() |
Initialisiert eine neue Instanz der EditCommandColumn-Klasse. |
Eigenschaften
ButtonType |
Ruft den Schaltflächentyp für die Spalte ab oder legt diesen fest. |
CancelText |
Ruft den für die |
CausesValidation |
Ruft einen Wert ab, der angibt, ob beim Klicken auf eine |
DesignMode |
Ruft einen Wert ab, der angibt, ob sich die Spalte im Entwurfsmodus befindet. (Geerbt von DataGridColumn) |
EditText |
Ruft den für die |
FooterStyle |
Ruft die Formatierungseigenschaften für den Fußzeilenbereich der Spalte ab. (Geerbt von DataGridColumn) |
FooterText |
Ruft den im Fußzeilenbereich der Spalte angezeigten Text ab oder legt diesen fest. (Geerbt von DataGridColumn) |
HeaderImageUrl |
Ruft den Speicherort eines Bilds ab, das im Headerbereich der Spalte angezeigt werden soll, oder legt diesen fest. (Geerbt von DataGridColumn) |
HeaderStyle |
Ruft die Formatierungseigenschaften für den Headerbereich der Spalte ab. (Geerbt von DataGridColumn) |
HeaderText |
Ruft den im Headerbereich der Spalte angezeigten Text ab oder legt diesen fest. (Geerbt von DataGridColumn) |
IsTrackingViewState |
Ruft einen Wert ab, der bestimmt, ob das DataGridColumn-Objekt markiert wird, um seinen Zustand zu speichern. (Geerbt von DataGridColumn) |
ItemStyle |
Ruft die Formatierungseigenschaften für die einzelnen Zellen der Spalte ab. (Geerbt von DataGridColumn) |
Owner |
Ruft das DataGrid-Steuerelement ab, zu dessen Membern die Spalte gehört. (Geerbt von DataGridColumn) |
SortExpression |
Ruft den Namen des Felds oder Ausdrucks ab, der an die OnSortCommand(DataGridSortCommandEventArgs)-Methode übergeben wird, wenn eine Spalte für die Sortierung ausgewählt wurde, oder legt diesen fest. (Geerbt von DataGridColumn) |
UpdateText |
Ruft den für die |
ValidationGroup |
Ruft die Gruppe von Validierungssteuerelementen ab, für die das EditCommandColumn-Objekt eine Validierung bewirkt, wenn ein Postback an den Server ausgeführt wird, oder legt diese Gruppe fest. |
ViewState |
Ruft das StateBag-Objekt ab, wodurch einer von der DataGridColumn-Klasse abgeleiteten Spalte ermöglicht wird, ihre Eigenschaften zu speichern. (Geerbt von DataGridColumn) |
Visible |
Ruft einen Wert ab, der angibt, ob die Spalte im DataGrid-Steuerelement sichtbar ist, oder legt diesen fest. (Geerbt von DataGridColumn) |
Methoden
Equals(Object) |
Bestimmt, ob das angegebene Objekt gleich dem aktuellen Objekt ist. (Geerbt von Object) |
GetHashCode() |
Fungiert als Standardhashfunktion. (Geerbt von Object) |
GetType() |
Ruft den Type der aktuellen Instanz ab. (Geerbt von Object) |
Initialize() |
Stellt die Basisimplementierung bereit, mit der eine aus der DataGridColumn-Klasse abgeleitete Spalte in ihren Ausgangszustand zurückgesetzt werden kann. (Geerbt von DataGridColumn) |
InitializeCell(TableCell, Int32, ListItemType) |
Initialisiert eine Zelle innerhalb der Spalte. |
LoadViewState(Object) |
Lädt den Zustand des DataGridColumn-Objekts. (Geerbt von DataGridColumn) |
MemberwiseClone() |
Erstellt eine flache Kopie des aktuellen Object. (Geerbt von Object) |
OnColumnChanged() |
Aufruf der OnColumnsChanged()-Methode. (Geerbt von DataGridColumn) |
SaveViewState() |
Speichert den aktuellen Zustand des DataGridColumn-Objekts. (Geerbt von DataGridColumn) |
ToString() |
Gibt die Zeichenfolgendarstellung der Spalte zurück. (Geerbt von DataGridColumn) |
TrackViewState() |
Veranlasst die Überwachung von Änderungen am Ansichtszustand des Serversteuerelements, sodass die Änderungen im StateBag-Objekt des Serversteuerelements gespeichert werden können. (Geerbt von DataGridColumn) |
Explizite Schnittstellenimplementierungen
IStateManager.IsTrackingViewState |
Ruft einen Wert ab, der angibt, ob die Spalte Änderungen des Ansichtszustands nachverfolgt. (Geerbt von DataGridColumn) |
IStateManager.LoadViewState(Object) |
Lädt den früher gespeicherten Zustand. (Geerbt von DataGridColumn) |
IStateManager.SaveViewState() |
Gibt ein Objekt zurück, das Zustandsänderungen enthält. (Geerbt von DataGridColumn) |
IStateManager.TrackViewState() |
Startet das Verfolgen von Zustandsänderungen. (Geerbt von DataGridColumn) |