EditCommandColumn Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Специальный тип столбца для элемента управления DataGrid, который содержит кнопки Edit
для редактирования элементов данных в каждой строке.
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
- Наследование
Примеры
В следующем примере кода показано, как добавить EditCommandColumn объект в DataGrid элемент управления .
<%@ 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>
Комментарии
Используйте класс , EditCommandColumn чтобы создать специальный столбец для DataGrid элемента управления , который содержит Edit
кнопки , Update
и Cancel
для каждой строки данных в сетке. Эти кнопки позволяют изменять значения строки в элементе DataGrid управления .
Если строка не выбрана, в объекте EditCommandColumn для каждой Edit
строки данных в элементе DataGrid управления отображается кнопка. При нажатии кнопки Edit
для элемента возникает событие , EditCommand а Edit
кнопка заменяется кнопками Update
и Cancel
. Необходимо предоставить код для обработки EditCommand события. Типичный обработчик событий задает EditItemIndex для свойства выбранную строку, а затем повторно привязывает данные к элементу DataGrid управления .
Примечание
Необходимо указать значения для CancelTextсвойств , EditTextи UpdateText . В противном случае связанные кнопки не будут отображаться в EditCommandColumn.
Для кнопок в EditCommandColumn можно задать отображение в виде гиперссылок или кнопок, задав ButtonType свойство .
Нажатие кнопки Update
или Cancel
вызывает UpdateCommand событие или CancelCommand соответственно. Для обработки этих событий необходимо предоставить код.
Типичный UpdateCommand обработчик события обновляет данные, задает свойству EditItemIndex значение -1
(чтобы отменить выбор элемента), а затем повторно привязывает данные к элементу DataGrid управления .
Типичный обработчик события CancelCommand задает свойству EditItemIndex значение -1
(для отмены выбора элемента), а затем повторно привязывает данные к элементу DataGrid управления .
Внимание!
Объект EditCommandColumn можно использовать для отображения введенных пользователем данных, которые могут включать вредоносный клиентский скрипт. Перед отображением в приложении проверьте все сведения, отправляемые клиентом для исполняемого скрипта, инструкций SQL или другого кода. Вы можете использовать элементы управления проверки для проверки введенных пользователем данных перед отображением входного текста в элементе DataGrid управления. ASP.NET предоставляет функцию проверки входных запросов для блокировки скриптов и HTML во входных данных пользователя. Дополнительные сведения см. в разделах Защита стандартных элементов управления, Практическое руководство. Защита от эксплойтов скриптов в веб-приложении путем применения кодировки HTML к строкам и Проверка входных данных пользователя на веб-страницах ASP.NET.
По умолчанию проверка страницы выполняется при Update
нажатии кнопки в элементе EditCommandColumn управления . Проверка страницы определяет, все ли элементы управления ввода, связанные с элементом управления проверки на странице, соответствуют правилам проверки, заданным этим элементом управления. Чтобы предотвратить проверку страницы, присвойте свойству CausesValidation значение false
.
Конструкторы
EditCommandColumn() |
Инициализирует новый экземпляр класса EditCommandColumn. |
Свойства
ButtonType |
Получает или задает тип кнопки для столбца. |
CancelText |
Получает или задает текст, отображаемый для кнопки |
CausesValidation |
Получает или задает значение, показывающее, выполняется ли проверка при нажатии кнопки |
DesignMode |
Возвращает значение, показывающее, находится ли столбец в режиме конструктора. (Унаследовано от DataGridColumn) |
EditText |
Получает или задает текст, отображаемый для кнопки |
FooterStyle |
Возвращает свойства стиля для раздела нижнего колонтитула столбца. (Унаследовано от DataGridColumn) |
FooterText |
Получает или задает текст, отображаемый в разделе нижнего колонтитула столбца. (Унаследовано от DataGridColumn) |
HeaderImageUrl |
Получает или задает размещение изображения, отображаемого в разделе нижнего колонтитула столбца. (Унаследовано от DataGridColumn) |
HeaderStyle |
Возвращает свойства стиля для раздела верхнего колонтитула столбца. (Унаследовано от DataGridColumn) |
HeaderText |
Получает или задает текст, отображаемый в разделе верхнего колонтитула столбца. (Унаследовано от DataGridColumn) |
IsTrackingViewState |
Возвращает значение, которое определяет, отмечается ли объект DataGridColumn, чтобы сохранить его состояние. (Унаследовано от DataGridColumn) |
ItemStyle |
Возвращает свойства стиля для ячеек столбца. (Унаследовано от DataGridColumn) |
Owner |
Возвращает элемент управления DataGrid, в который входит данный столбец. (Унаследовано от DataGridColumn) |
SortExpression |
Получает или задает имя поля или выражения, передаваемого методу OnSortCommand(DataGridSortCommandEventArgs), когда столбец выбран для сортировки. (Унаследовано от DataGridColumn) |
UpdateText |
Получает или задает текст, отображаемый для кнопки |
ValidationGroup |
Получает или задает группу элементов управления проверки, для которых объект EditCommandColumn инициирует проверку при обратной передаче. |
ViewState |
Возвращает объект StateBag, что позволяет столбцу, полученному из класса DataGridColumn, сохранять свои свойства. (Унаследовано от DataGridColumn) |
Visible |
Получает или задает значение, показывающее, является ли столбец видимым в элементе управления DataGrid. (Унаследовано от DataGridColumn) |
Методы
Equals(Object) |
Определяет, равен ли указанный объект текущему объекту. (Унаследовано от Object) |
GetHashCode() |
Служит хэш-функцией по умолчанию. (Унаследовано от Object) |
GetType() |
Возвращает объект Type для текущего экземпляра. (Унаследовано от Object) |
Initialize() |
Предоставляет базовую реализацию для сброса столбца, полученного из класса DataGridColumn, в исходное состояние. (Унаследовано от DataGridColumn) |
InitializeCell(TableCell, Int32, ListItemType) |
Инициализирует ячейку в столбце. |
LoadViewState(Object) |
Загружает состояние объекта DataGridColumn. (Унаследовано от DataGridColumn) |
MemberwiseClone() |
Создает неполную копию текущего объекта Object. (Унаследовано от Object) |
OnColumnChanged() |
Вызывает метод OnColumnsChanged(). (Унаследовано от DataGridColumn) |
SaveViewState() |
Сохраняет текущее состояние объекта DataGridColumn. (Унаследовано от DataGridColumn) |
ToString() |
Возвращает строковое представление столбца. (Унаследовано от DataGridColumn) |
TrackViewState() |
Вызывает отслеживание изменений состояния представления серверного элемента управления для сохранения в объекте StateBag серверного элемента управления. (Унаследовано от DataGridColumn) |
Явные реализации интерфейса
IStateManager.IsTrackingViewState |
Возвращает значение, указывающее, отслеживает ли столбец изменения состояния представления. (Унаследовано от DataGridColumn) |
IStateManager.LoadViewState(Object) |
Загружает сохраненное ранее состояние. (Унаследовано от DataGridColumn) |
IStateManager.SaveViewState() |
Возвращает объект, содержащий данные об изменении состояния. (Унаследовано от DataGridColumn) |
IStateManager.TrackViewState() |
Запускает отслеживание изменений состояния. (Унаследовано от DataGridColumn) |