Udostępnij za pośrednictwem


EditCommandColumn Klasa

Definicja

Specjalny typ kolumny dla kontrolki DataGrid zawierającej Edit przyciski do edytowania elementów danych w każdym wierszu.

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
Dziedziczenie
EditCommandColumn

Przykłady

W poniższym przykładzie kodu pokazano, jak dodać EditCommandColumn obiekt do kontrolki 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>

Uwagi

EditCommandColumn Użyj klasy , aby utworzyć specjalną kolumnę dla kontrolki DataGrid zawierającej Editprzyciski , Updatei Cancel dla każdego wiersza danych w siatce. Te przyciski umożliwiają edytowanie wartości wiersza w kontrolce DataGrid .

Jeśli żaden wiersz nie jest zaznaczony, Edit w obiekcie jest wyświetlany EditCommandColumn przycisk dla każdego wiersza danych w kontrolce DataGrid . Po kliknięciu Edit przycisku elementu zdarzenie jest wywoływane, EditCommand a Edit przycisk jest zastępowany Update przyciskami i Cancel . Musisz podać kod do obsługi EditCommand zdarzenia. Typowa procedura obsługi zdarzeń ustawia EditItemIndex właściwość na wybrany wiersz, a następnie ponownie tworzy powiązanie danych z kontrolką DataGrid .

Uwaga

Musisz podać wartości właściwości CancelText, EditTexti UpdateText . W przeciwnym razie skojarzone przyciski nie będą wyświetlane w obiekcie EditCommandColumn.

Przyciski w obiekcie EditCommandColumn można ustawić tak, aby wyświetlały się jako hiperlinki lub przyciski, ustawiając ButtonType właściwość .

Kliknięcie przycisku lub powoduje wywołanie UpdateUpdateCommand zdarzenia lubCancelCommand.Cancel Musisz podać kod do obsługi tych zdarzeń.

Typowa procedura obsługi zdarzenia UpdateCommand aktualizuje dane, ustawia EditItemIndex właściwość na -1 (aby usunąć zaznaczenie elementu), a następnie ponownie tworzy powiązanie danych z kontrolką DataGrid .

Typowa procedura obsługi zdarzenia CancelCommand ustawia właściwość na -1 (aby usunąć zaznaczenie elementu), a następnie ponownie tworzy powiązanie danych z kontrolką DataGridEditItemIndex.

Przestroga

Obiekt może służyć do wyświetlania EditCommandColumn danych wejściowych użytkownika, które mogą obejmować złośliwy skrypt klienta. Przed wyświetleniem w aplikacji sprawdź informacje wysyłane z klienta pod kątem skryptu wykonywalnego, instrukcji SQL lub innego kodu. Kontrolki weryfikacji umożliwiają zweryfikowanie danych wejściowych użytkownika przed wyświetleniem tekstu wejściowego w kontrolce DataGrid . ASP.NET udostępnia funkcję weryfikacji żądania wejściowego w celu blokowania skryptu i kodu HTML w danych wejściowych użytkownika. Aby uzyskać więcej informacji, zobacz Securing Standard Controls (Zabezpieczanie standardowych kontrolek), How to: Protect Against Script Exploits in a Web Application by Applying HTML Encoding to Strings (Zabezpieczanie standardowych kontrolek), How to: Protect Against Script Exploits in a Web Pages (Zabezpieczanie standardowych kontrolek: ochrona przed programami wykorzystującymi luki w zabezpieczeniach skryptów w aplikacji internetowej przez zastosowanie kodowania HTML do ciągów) i Weryfikowanie danych wejściowych użytkownika na stronach sieci Web ASP.NET.

Domyślnie sprawdzanie poprawności strony jest wykonywane po Update kliknięciu przycisku w kontrolce EditCommandColumn . Sprawdzanie poprawności strony określa, czy kontrolki wejściowe skojarzone z kontrolką walidacji na stronie przechodzą wszystkie reguły walidacji określone przez kontrolkę walidacji. Aby zapobiec występowaniu walidacji strony, ustaw CausesValidation właściwość na falsewartość .

Konstruktory

EditCommandColumn()

Inicjuje nowe wystąpienie klasy EditCommandColumn.

Właściwości

ButtonType

Pobiera lub ustawia typ przycisku dla kolumny.

CancelText

Pobiera lub ustawia tekst do wyświetlenia dla Cancel przycisku polecenia w pliku EditCommandColumn.

CausesValidation

Pobiera lub ustawia wartość wskazującą, czy walidacja jest wykonywana po Update kliknięciu EditCommandColumn przycisku w obiekcie.

DesignMode

Pobiera wartość wskazującą, czy kolumna jest w trybie projektowania.

(Odziedziczone po DataGridColumn)
EditText

Pobiera lub ustawia tekst do wyświetlenia dla Edit przycisku w elemecie EditCommandColumn.

FooterStyle

Pobiera właściwości stylu dla sekcji stopki kolumny.

(Odziedziczone po DataGridColumn)
FooterText

Pobiera lub ustawia tekst wyświetlany w sekcji stopki kolumny.

(Odziedziczone po DataGridColumn)
HeaderImageUrl

Pobiera lub ustawia lokalizację obrazu do wyświetlenia w sekcji nagłówka kolumny.

(Odziedziczone po DataGridColumn)
HeaderStyle

Pobiera właściwości stylu dla sekcji nagłówka kolumny.

(Odziedziczone po DataGridColumn)
HeaderText

Pobiera lub ustawia tekst wyświetlany w sekcji nagłówka kolumny.

(Odziedziczone po DataGridColumn)
IsTrackingViewState

Pobiera wartość określającą, czy DataGridColumn obiekt jest oznaczony w celu zapisania jego stanu.

(Odziedziczone po DataGridColumn)
ItemStyle

Pobiera właściwości stylu dla komórek elementów kolumny.

(Odziedziczone po DataGridColumn)
Owner

Pobiera kontrolkę DataGrid , do którego należy kolumna.

(Odziedziczone po DataGridColumn)
SortExpression

Pobiera lub ustawia nazwę pola lub wyrażenia, które ma być przekazywane do OnSortCommand(DataGridSortCommandEventArgs) metody po wybraniu kolumny do sortowania.

(Odziedziczone po DataGridColumn)
UpdateText

Pobiera lub ustawia tekst do wyświetlenia dla Update przycisku polecenia w pliku EditCommandColumn.

ValidationGroup

Pobiera lub ustawia grupę kontrolek weryfikacji, dla których EditCommandColumn obiekt powoduje walidację po powrocie do serwera.

ViewState

StateBag Pobiera obiekt, który umożliwia kolumnie pochodzącej DataGridColumn z klasy przechowywanie jej właściwości.

(Odziedziczone po DataGridColumn)
Visible

Pobiera lub ustawia wartość wskazującą, czy kolumna jest widoczna w kontrolce DataGrid .

(Odziedziczone po DataGridColumn)

Metody

Equals(Object)

Określa, czy dany obiekt jest taki sam, jak bieżący obiekt.

(Odziedziczone po Object)
GetHashCode()

Służy jako domyślna funkcja skrótu.

(Odziedziczone po Object)
GetType()

Type Pobiera wartość bieżącego wystąpienia.

(Odziedziczone po Object)
Initialize()

Udostępnia podstawową implementację w celu zresetowania kolumny pochodzącej z klasy do stanu początkowego DataGridColumn .

(Odziedziczone po DataGridColumn)
InitializeCell(TableCell, Int32, ListItemType)

Inicjuje komórkę w kolumnie.

LoadViewState(Object)

Ładuje stan DataGridColumn obiektu.

(Odziedziczone po DataGridColumn)
MemberwiseClone()

Tworzy płytkią kopię bieżącego Objectelementu .

(Odziedziczone po Object)
OnColumnChanged()

Wywołuje metodę OnColumnsChanged() .

(Odziedziczone po DataGridColumn)
SaveViewState()

Zapisuje bieżący stan DataGridColumn obiektu.

(Odziedziczone po DataGridColumn)
ToString()

Zwraca reprezentację ciągu kolumny.

(Odziedziczone po DataGridColumn)
TrackViewState()

Powoduje śledzenie zmian stanu widoku w kontrolce serwera, dzięki czemu można je przechowywać w obiekcie kontrolki StateBag serwera.

(Odziedziczone po DataGridColumn)

Jawne implementacje interfejsu

IStateManager.IsTrackingViewState

Pobiera wartość wskazującą, czy kolumna śledzi zmiany stanu widoku.

(Odziedziczone po DataGridColumn)
IStateManager.LoadViewState(Object)

Ładuje wcześniej zapisany stan.

(Odziedziczone po DataGridColumn)
IStateManager.SaveViewState()

Zwraca obiekt zawierający zmiany stanu.

(Odziedziczone po DataGridColumn)
IStateManager.TrackViewState()

Rozpoczyna śledzenie zmian stanu.

(Odziedziczone po DataGridColumn)

Dotyczy

Zobacz też