EditCommandColumn Clase
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Tipo de columna especial para el control DataGrid que contiene los botones Edit
para editar los elementos de datos en cada fila.
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
- Herencia
Ejemplos
En el ejemplo de código siguiente se muestra cómo agregar un EditCommandColumn objeto a un DataGrid control .
<%@ 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>
Comentarios
Use la EditCommandColumn clase para crear una columna especial para el DataGrid control que contiene los Edit
botones , Update
y Cancel
para cada fila de datos de la cuadrícula. Estos botones permiten editar los valores de una fila en el DataGrid control .
Si no se selecciona ninguna fila, se muestra un Edit
botón en el EditCommandColumn objeto para cada fila de datos del DataGrid control . Cuando se hace clic en el Edit
botón de un elemento, se genera el EditCommand evento y el Edit
botón se reemplaza por los Update
botones y Cancel
. Debe proporcionar código para controlar el EditCommand evento. Un controlador de eventos típico establece la EditItemIndex propiedad en la fila seleccionada y, a continuación, vuelve a enlazar los datos al DataGrid control.
Nota
Debe proporcionar valores para las CancelTextpropiedades , EditTexty UpdateText . De lo contrario, los botones asociados no aparecerán en .EditCommandColumn
Los botones de EditCommandColumn se pueden establecer para que se muestren como hipervínculos o botones de inserción estableciendo la ButtonType propiedad .
Al hacer clic en el Update
botón o Cancel
se genera el UpdateCommand evento o CancelCommand , respectivamente. Debe proporcionar código para controlar estos eventos.
Un controlador típico para el UpdateCommand evento actualiza los datos, establece la EditItemIndex propiedad -1
en (para anular la selección del elemento) y, a continuación, vuelve a enlazar los datos al DataGrid control.
Un controlador típico para el CancelCommand evento establece la EditItemIndex propiedad -1
en (para anular la selección del elemento) y, a continuación, vuelve a enlazar los datos al DataGrid control.
Precaución
El EditCommandColumn objeto se puede usar para mostrar la entrada del usuario, que puede incluir un script de cliente malintencionado. Compruebe cualquier información que se envíe desde un cliente para el script ejecutable, las instrucciones SQL u otro código antes de mostrarla en la aplicación. Puede usar controles de validación para comprobar la entrada del usuario antes de mostrar el texto de entrada en un DataGrid control. ASP.NET proporciona una característica de validación de solicitudes de entrada para bloquear script y HTML en la entrada del usuario. Para obtener más información, vea Protección de controles estándar, Protección contra vulnerabilidades de seguridad de script en una aplicación web mediante la aplicación de codificación HTML en cadenas y validación de entradas de usuario en ASP.NET Páginas web.
De forma predeterminada, la validación de página se realiza cuando se hace clic en un Update
botón del EditCommandColumn control. La validación de páginas determina si los controles de entrada asociados a un control de validación de la página pasan todas las reglas de validación especificadas por el control de validación. Para evitar que se produzca la validación de páginas, establezca la CausesValidation propiedad false
en .
Constructores
EditCommandColumn() |
Inicializa una nueva instancia de la clase EditCommandColumn. |
Propiedades
ButtonType |
Obtiene o establece el tipo de botón para la columna. |
CancelText |
Obtiene o establece el texto que se va a mostrar en el botón de comando |
CausesValidation |
Obtiene o establece un valor que indica si la validación se realiza al hacer clic en el control |
DesignMode |
Obtiene un valor que indica si la columna está en modo de diseño. (Heredado de DataGridColumn) |
EditText |
Obtiene o establece el texto que se muestra en el botón |
FooterStyle |
Obtiene las propiedades de estilo de la sección de pie de página de la columna. (Heredado de DataGridColumn) |
FooterText |
Obtiene o establece el texto que se muestra en la sección de pie de página de la columna. (Heredado de DataGridColumn) |
HeaderImageUrl |
Obtiene o establece la ubicación de una imagen que se va a mostrar en la sección de encabezado de la columna. (Heredado de DataGridColumn) |
HeaderStyle |
Obtiene las propiedades de estilo de la sección de encabezado de la columna. (Heredado de DataGridColumn) |
HeaderText |
Obtiene o establece el texto que se muestra en la sección de encabezado de la columna. (Heredado de DataGridColumn) |
IsTrackingViewState |
Obtiene un valor que determina si el objeto DataGridColumn se marca para que guarde su estado. (Heredado de DataGridColumn) |
ItemStyle |
Obtiene las propiedades de estilo de las celdas de elemento de la columna. (Heredado de DataGridColumn) |
Owner |
Obtiene el control DataGrid del que forma parte la columna. (Heredado de DataGridColumn) |
SortExpression |
Obtiene o establece el nombre del campo o expresión que se va a pasar al método OnSortCommand(DataGridSortCommandEventArgs) cuando se selecciona una columna para ordenarla. (Heredado de DataGridColumn) |
UpdateText |
Obtiene o establece el texto que se va a mostrar en el botón de comando |
ValidationGroup |
Obtiene o establece el grupo de controles de validación para los que el objeto EditCommandColumn ejecuta la validación cuando realiza devoluciones de datos al servidor. |
ViewState |
Obtiene el objeto StateBag, que permite a una columna derivada de la clase DataGridColumn almacenar sus propiedades. (Heredado de DataGridColumn) |
Visible |
Obtiene o establece un valor que indica si se muestra la columna en el control DataGrid. (Heredado de DataGridColumn) |
Métodos
Equals(Object) |
Determina si el objeto especificado es igual que el objeto actual. (Heredado de Object) |
GetHashCode() |
Sirve como la función hash predeterminada. (Heredado de Object) |
GetType() |
Obtiene el Type de la instancia actual. (Heredado de Object) |
Initialize() |
Proporciona la implementación base para restablecer una columna derivada de la clase DataGridColumn a su estado inicial. (Heredado de DataGridColumn) |
InitializeCell(TableCell, Int32, ListItemType) |
Inicializa una celda de la columna. |
LoadViewState(Object) |
Carga el estado del objeto DataGridColumn. (Heredado de DataGridColumn) |
MemberwiseClone() |
Crea una copia superficial del Object actual. (Heredado de Object) |
OnColumnChanged() |
Llama al método OnColumnsChanged(). (Heredado de DataGridColumn) |
SaveViewState() |
Guarda el estado actual del objeto DataGridColumn. (Heredado de DataGridColumn) |
ToString() |
Devuelve la representación de cadena de la columna. (Heredado de DataGridColumn) |
TrackViewState() |
Origina el seguimiento de los cambios del estado de vista del control de servidor de manera que se puedan almacenar en el objeto StateBag del control de servidor. (Heredado de DataGridColumn) |
Implementaciones de interfaz explícitas
IStateManager.IsTrackingViewState |
Obtiene un valor que indica si la columna está efectuando un seguimiento de los cambios del estado de vista. (Heredado de DataGridColumn) |
IStateManager.LoadViewState(Object) |
Carga el estado guardado anteriormente. (Heredado de DataGridColumn) |
IStateManager.SaveViewState() |
Devuelve un objeto que contiene los cambios de estado. (Heredado de DataGridColumn) |
IStateManager.TrackViewState() |
Inicia el seguimiento de los cambios de estado. (Heredado de DataGridColumn) |