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 di colonna speciale per il DataGrid controllo che contiene i Edit pulsanti 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 EditCommandColumn oggetto a un DataGrid 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
Usare la EditCommandColumn classe per creare una colonna speciale per il DataGrid controllo contenente i Editpulsanti , Updatee Cancel per ogni riga di dati nella griglia. Questi pulsanti consentono di modificare i valori di una riga nel DataGrid controllo .
Se non è selezionata alcuna riga, viene visualizzato un Edit pulsante nell'oggetto EditCommandColumn per ogni riga di dati nel DataGrid controllo . Quando si fa clic sul Edit pulsante per un elemento, viene generato l'evento EditCommand e il Edit pulsante viene sostituito con i Update pulsanti e Cancel . È necessario fornire il codice per gestire l'evento EditCommand . Un gestore eventi tipico imposta la EditItemIndex proprietà sulla riga selezionata e quindi ricollega i dati al DataGrid controllo.
Annotazioni
È necessario specificare i valori per le CancelTextproprietà , EditTexte UpdateText . In caso contrario, i pulsanti associati non verranno visualizzati in EditCommandColumn.
I pulsanti in EditCommandColumn possono essere impostati per essere visualizzati come collegamenti ipertestuali o pulsanti di pressione impostando la ButtonType proprietà .
Facendo clic sul Update pulsante o viene generato rispettivamente l'evento UpdateCommand o CancelCancelCommand . È necessario fornire il 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 riassocia i dati al DataGrid controllo.
Un gestore tipico per l'evento CancelCommand imposta la EditItemIndex proprietà su -1 (per deselezionare l'elemento) e quindi riassocia i dati al DataGrid controllo.
Attenzione
L'oggetto EditCommandColumn può essere usato per visualizzare l'input dell'utente, che potrebbe includere script client dannosi. Controllare le informazioni inviate da un client per lo script eseguibile, le istruzioni SQL o altro codice prima di visualizzarlo nell'applicazione. È possibile usare i controlli di convalida per verificare l'input dell'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 lo script e il codice HTML nell'input dell'utente. Per altre informazioni, vedere Protezione dei controlli standard, Procedura: Proteggere dagli exploit di script in un'applicazione Web applicando la codifica HTML alle stringhe e convalidando l'input dell'utente in ASP.NET pagine Web.
Per impostazione predefinita, la convalida della pagina viene eseguita quando si fa 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
| Nome | Descrizione |
|---|---|
| EditCommandColumn() |
Inizializza una nuova istanza della classe EditCommandColumn. |
Proprietà
| Nome | Descrizione |
|---|---|
| ButtonType |
Ottiene o imposta il tipo di pulsante per la colonna. |
| CancelText |
Ottiene o imposta il testo da visualizzare per il pulsante di |
| CausesValidation |
Ottiene o imposta un valore che indica se viene eseguita la convalida quando si fa clic su un |
| 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 |
| FooterStyle |
Ottiene le proprietà di stile per la sezione piè di pagina della colonna. (Ereditato da DataGridColumn) |
| FooterText |
Ottiene o imposta il testo visualizzato nella sezione piè di pagina della colonna. (Ereditato da DataGridColumn) |
| HeaderImageUrl |
Ottiene o imposta la posizione di un'immagine da visualizzare nella sezione intestazione della colonna. (Ereditato da DataGridColumn) |
| HeaderStyle |
Ottiene le proprietà di stile per la sezione intestazione della colonna. (Ereditato da DataGridColumn) |
| HeaderText |
Ottiene o imposta il testo visualizzato nella sezione intestazione della colonna. (Ereditato da DataGridColumn) |
| IsTrackingViewState |
Ottiene un valore che determina se l'oggetto DataGridColumn è contrassegnato per salvare il relativo stato. (Ereditato da DataGridColumn) |
| ItemStyle |
Ottiene le proprietà di stile per le celle dell'elemento della colonna. (Ereditato da DataGridColumn) |
| Owner |
Ottiene il DataGrid controllo di cui la colonna è membro. (Ereditato da DataGridColumn) |
| SortExpression |
Ottiene o imposta il nome del campo o dell'espressione da passare al OnSortCommand(DataGridSortCommandEventArgs) metodo quando viene selezionata una colonna per l'ordinamento. (Ereditato da DataGridColumn) |
| UpdateText |
Ottiene o imposta il testo da visualizzare per il pulsante di |
| ValidationGroup |
Ottiene o imposta il gruppo di controlli di convalida per cui l'oggetto EditCommandColumn causa la convalida quando esegue il postback al server. |
| ViewState |
Ottiene l'oggetto StateBag che consente a una colonna derivata dalla DataGridColumn classe di archiviarne le proprietà. (Ereditato da DataGridColumn) |
| Visible |
Ottiene o imposta un valore che indica se la colonna è visibile nel DataGrid controllo . (Ereditato da DataGridColumn) |
Metodi
| Nome | Descrizione |
|---|---|
| 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 reimpostare una colonna derivata dalla DataGridColumn classe allo stato iniziale. (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 corrente Object. (Ereditato da Object) |
| OnColumnChanged() |
Chiama il OnColumnsChanged() metodo . (Ereditato da DataGridColumn) |
| SaveViewState() |
Salva lo stato corrente dell'oggetto DataGridColumn . (Ereditato da DataGridColumn) |
| ToString() |
Restituisce la rappresentazione di stringa della colonna. (Ereditato da DataGridColumn) |
| TrackViewState() |
Determina il rilevamento delle modifiche dello stato di visualizzazione al controllo server in modo che possano essere archiviate nell'oggetto del StateBag controllo server. (Ereditato da DataGridColumn) |
Implementazioni dell'interfaccia esplicita
| Nome | Descrizione |
|---|---|
| IStateManager.IsTrackingViewState |
Ottiene un valore che indica se la colonna sta tenendo traccia delle 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 modifiche dello stato. (Ereditato da DataGridColumn) |
| IStateManager.TrackViewState() |
Avvia il rilevamento delle modifiche dello stato. (Ereditato da DataGridColumn) |