Поделиться через


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

Примеры

В следующем примере кода показано, как добавить 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 элемента управления, содержащего EditUpdateCancel и кнопки для каждой строки данных в сетке. Эти кнопки позволяют изменять значения строки в элементе DataGrid управления.

Если строка не выбрана Edit , кнопка отображается в объекте EditCommandColumn для каждой строки данных в элементе DataGrid управления. Edit При нажатии EditCommand кнопки для элемента возникает событие, а Edit кнопка заменяется кнопкой и UpdateCancel кнопкой. Необходимо предоставить код для обработки EditCommand события. Типичный обработчик событий задает EditItemIndex свойство выбранной строке, а затем повторно привязывает данные к элементу DataGrid управления.

Замечание

Необходимо указать значения для CancelTextсвойств и UpdateText свойствEditText. В противном случае связанные кнопки не будут отображаться в 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

Возвращает или задает текст, отображаемый для кнопки Cancel команды в элементе EditCommandColumnуправления.

CausesValidation

Возвращает или задает значение, указывающее, выполняется ли проверка при Update нажатии кнопки в объекте EditCommandColumn .

DesignMode

Возвращает значение, указывающее, находится ли столбец в режиме конструктора.

(Унаследовано от DataGridColumn)
EditText

Возвращает или задает текст, отображаемый для кнопки Edit в элементе EditCommandColumn.

FooterStyle

Возвращает свойства стиля для нижнего колонтитула столбца.

(Унаследовано от DataGridColumn)
FooterText

Возвращает или задает текст, отображаемый в нижнем колонтитуле столбца.

(Унаследовано от DataGridColumn)
HeaderImageUrl

Возвращает или задает расположение изображения, отображаемого в разделе заголовка столбца.

(Унаследовано от DataGridColumn)
HeaderStyle

Возвращает свойства стиля для раздела заголовка столбца.

(Унаследовано от DataGridColumn)
HeaderText

Возвращает или задает текст, отображаемый в разделе заголовка столбца.

(Унаследовано от DataGridColumn)
IsTrackingViewState

Возвращает значение, определяющее, помечен ли DataGridColumn объект для сохранения состояния.

(Унаследовано от DataGridColumn)
ItemStyle

Возвращает свойства стиля для ячеек элемента столбца.

(Унаследовано от DataGridColumn)
Owner

DataGrid Возвращает элемент управления, в который входит столбец.

(Унаследовано от DataGridColumn)
SortExpression

Возвращает или задает имя поля или выражения, передаваемого OnSortCommand(DataGridSortCommandEventArgs) методу при выборе столбца для сортировки.

(Унаследовано от DataGridColumn)
UpdateText

Возвращает или задает текст, отображаемый для кнопки Update команды в элементе EditCommandColumnуправления.

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)

Применяется к

См. также раздел