EditCommandColumn Classe
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Tipo speciale di colonna per il controllo DataGrid che contiene i pulsanti Edit
per la modifica degli elementi di dati in ogni riga.
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
- Ereditarietà
Esempio
Nell'esempio di codice seguente viene illustrato come aggiungere un oggetto a un EditCommandColumnDataGrid controllo.
<%@ 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>
Commenti
Utilizzare la EditCommandColumn classe per creare una colonna speciale per il DataGrid controllo contenente i Edit
pulsanti , Update
e Cancel
per ogni riga di dati nella griglia. Questi pulsanti consentono di modificare i valori di una riga nel DataGrid controllo.
Se non viene selezionata alcuna riga, viene visualizzato un Edit
pulsante nell'oggetto EditCommandColumn per ogni riga di dati nel DataGrid controllo. Quando viene fatto clic sul Edit
pulsante per un elemento, l'evento EditCommand viene generato e il Edit
pulsante viene sostituito con i Update
pulsanti e Cancel
. È necessario specificare il codice per gestire l'evento EditCommand . Un gestore eventi tipico imposta la EditItemIndex proprietà sulla riga selezionata e quindi ribina i dati al DataGrid controllo.
Nota
È necessario specificare i valori per le CancelTextproprietà , EditTexte UpdateText . In caso contrario, i pulsanti associati non verranno visualizzati in EditCommandColumn.
I pulsanti nell'oggetto EditCommandColumn possono essere impostati per visualizzare come collegamenti ipertestuali o pulsanti push impostando la ButtonType proprietà.
Facendo clic sul pulsante o viene generato rispettivamente l'evento Update
UpdateCommand o Cancel
CancelCommand. È necessario fornire codice per gestire questi eventi.
Un gestore tipico per l'evento UpdateCommand aggiorna i dati, imposta la EditItemIndex proprietà su -1
(per deselezionare l'elemento) e quindi ribina i dati al DataGrid controllo.
Un gestore tipico per l'evento CancelCommand imposta la EditItemIndex proprietà su -1
(per deselezionare l'elemento) e quindi ribina i dati al DataGrid controllo.
Attenzione
L'oggetto EditCommandColumn può essere usato per visualizzare l'input utente, che potrebbe includere script client dannosi. Controllare tutte le informazioni inviate da un client per script eseguibili, istruzioni SQL o altro codice prima di visualizzarlo nell'applicazione. È possibile usare i controlli di convalida per verificare l'input utente prima di visualizzare il testo di input in un DataGrid controllo. ASP.NET fornisce una funzionalità di convalida della richiesta di input per bloccare script e HTML nell'input utente. Per altre informazioni, vedere Protezione dei controlli standard, Procedura: Protezione dagli exploit di script in un'applicazione Web applicando la codifica HTML alle stringhe e convalidando l'input utente nelle pagine Web ASP.NET.
Per impostazione predefinita, la convalida della pagina viene eseguita quando viene fatto clic su un Update
pulsante nel EditCommandColumn controllo. La convalida della pagina determina se i controlli di input associati a un controllo di convalida nella pagina passano tutte le regole di convalida specificate dal controllo di convalida. Per impedire che si verifichi la convalida della pagina, impostare la CausesValidation proprietà su false
.
Costruttori
EditCommandColumn() |
Inizializza una nuova istanza della classe EditCommandColumn. |
Proprietà
ButtonType |
Ottiene o imposta il tipo di pulsante per la colonna. |
CancelText |
Ottiene o imposta il testo da visualizzare per il pulsante di comando |
CausesValidation |
Ottiene o imposta un valore che indica se viene eseguita la convalida quando si fa clic su un pulsante |
DesignMode |
Ottiene un valore che indica se la colonna è in modalità progettazione. (Ereditato da DataGridColumn) |
EditText |
Ottiene o imposta il testo da visualizzare per il pulsante |
FooterStyle |
Ottiene le proprietà di stile per la sezione del piè di pagina della colonna. (Ereditato da DataGridColumn) |
FooterText |
Ottiene o imposta il testo visualizzato nella sezione del piè di pagina della colonna. (Ereditato da DataGridColumn) |
HeaderImageUrl |
Ottiene o imposta la posizione di un'immagine da visualizzare nella sezione di intestazione della colonna. (Ereditato da DataGridColumn) |
HeaderStyle |
Ottiene le proprietà di stile per la sezione di intestazione della colonna. (Ereditato da DataGridColumn) |
HeaderText |
Ottiene o imposta il testo visualizzato nella sezione di intestazione della colonna. (Ereditato da DataGridColumn) |
IsTrackingViewState |
Ottiene un valore che determina se l'oggetto DataGridColumn è contrassegnato per il salvataggio dello stato. (Ereditato da DataGridColumn) |
ItemStyle |
Ottiene le proprietà di stile per le celle degli elementi della colonna. (Ereditato da DataGridColumn) |
Owner |
Ottiene il controllo DataGrid di cui la colonna è membro. (Ereditato da DataGridColumn) |
SortExpression |
Ottiene o imposta il nome del campo o l'espressione da passare al metodo OnSortCommand(DataGridSortCommandEventArgs) quando una colonna viene selezionata per l'ordinamento. (Ereditato da DataGridColumn) |
UpdateText |
Ottiene o imposta il testo da visualizzare per il pulsante di comando |
ValidationGroup |
Ottiene o imposta il gruppo di controlli di convalida per il quale l'oggetto EditCommandColumn causa la convalida in occasione del postback al server. |
ViewState |
Ottiene l'oggetto StateBag che consente a una colonna derivata dalla classe DataGridColumn di memorizzare le relative proprietà. (Ereditato da DataGridColumn) |
Visible |
Ottiene o imposta un valore che indica se la colonna è visibile nel controllo DataGrid. (Ereditato da DataGridColumn) |
Metodi
Equals(Object) |
Determina se l'oggetto specificato è uguale all'oggetto corrente. (Ereditato da Object) |
GetHashCode() |
Funge da funzione hash predefinita. (Ereditato da Object) |
GetType() |
Ottiene l'oggetto Type dell'istanza corrente. (Ereditato da Object) |
Initialize() |
Fornisce l'implementazione di base per ripristinare lo stato iniziale di una colonna derivata dalla classe DataGridColumn. (Ereditato da DataGridColumn) |
InitializeCell(TableCell, Int32, ListItemType) |
Inizializza una cella all'interno della colonna. |
LoadViewState(Object) |
Carica lo stato dell'oggetto DataGridColumn. (Ereditato da DataGridColumn) |
MemberwiseClone() |
Crea una copia superficiale dell'oggetto Object corrente. (Ereditato da Object) |
OnColumnChanged() |
Chiama il metodo OnColumnsChanged(). (Ereditato da DataGridColumn) |
SaveViewState() |
Salva lo stato corrente dell'oggetto DataGridColumn. (Ereditato da DataGridColumn) |
ToString() |
Restituisce la rappresentazione in forma di stringa della colonna. (Ereditato da DataGridColumn) |
TrackViewState() |
Attiva il rilevamento delle modifiche dello stato di visualizzazione nel controllo server per consentirne la memorizzazione nell'oggetto StateBag del controllo server. (Ereditato da DataGridColumn) |
Implementazioni dell'interfaccia esplicita
IStateManager.IsTrackingViewState |
Ottiene un valore che indica se nella colonna vengono registrate le modifiche dello stato di visualizzazione. (Ereditato da DataGridColumn) |
IStateManager.LoadViewState(Object) |
Carica lo stato salvato in precedenza. (Ereditato da DataGridColumn) |
IStateManager.SaveViewState() |
Restituisce un oggetto contenente le modifiche dello stato. (Ereditato da DataGridColumn) |
IStateManager.TrackViewState() |
Avvia la registrazione delle modifiche dello stato. (Ereditato da DataGridColumn) |