DataListCommandEventHandler 委托    
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
表示将处理 CancelCommand 控件的 DeleteCommand、EditCommand、ItemCommand、UpdateCommand 和 DataList 事件的方法。
public delegate void DataListCommandEventHandler(System::Object ^ source, DataListCommandEventArgs ^ e);public delegate void DataListCommandEventHandler(object source, DataListCommandEventArgs e);type DataListCommandEventHandler = delegate of obj * DataListCommandEventArgs -> unitPublic Delegate Sub DataListCommandEventHandler(source As Object, e As DataListCommandEventArgs)参数
- source
- Object
事件源。
包含事件数据的 DataListCommandEventArgs。
示例
以下示例演示如何为控件的 EditCommand、 UpdateCommandCancelCommand 和 DeleteCommand 事件DataList定义事件处理程序。 此示例以声明方式指定事件处理程序,并设置控件上每个命令属性的 DataList 事件处理程序。
<%@ 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" >
<head>
    <title>DataList Edit Example</title>
<script runat="server">
      // The Cart and CartView objects temporarily store the data source
      // for the DataList 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 DataList 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)
         {
            BindList();
         }
                   
      }
      void BindList() 
      {
         // Set the data source and bind to the DataList control.
         ItemsList.DataSource = CartView;
         ItemsList.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 Edit_Command(Object sender, DataListCommandEventArgs e) 
      {
         // Set the EditItemIndex property to the index of the item clicked
         // in the DataList control to enable editing for that item. Be sure
         // to rebind the DataList to the data source to refresh the control.
         ItemsList.EditItemIndex = e.Item.ItemIndex;
         BindList();
      }
      void Cancel_Command(Object sender, DataListCommandEventArgs e) 
      {
         // Set the EditItemIndex property to -1 to exit editing mode. Be sure
         // to rebind the DataList to the data source to refresh the control.
         ItemsList.EditItemIndex = -1;
         BindList();
      }
      void Delete_Command(Object sender, DataListCommandEventArgs e) 
      { 
         // Retrieve the name of the item to remove.
         String item = ((Label)e.Item.FindControl("ItemLabel")).Text;
         // Filter the CartView for the selected item and remove it from
         // the data source.
         CartView.RowFilter = "Item='" + item + "'";
         if (CartView.Count > 0) 
         {
            CartView.Delete(0);
         }
         CartView.RowFilter = "";
         // Set the EditItemIndex property to -1 to exit editing mode. Be sure
         // to rebind the DataList to the data source to refresh the control.
         ItemsList.EditItemIndex = -1;
         BindList();
      }
      void Update_Command(Object sender, DataListCommandEventArgs e) 
      {
         // Retrieve the updated values from the selected item.
         String item = ((Label)e.Item.FindControl("ItemLabel")).Text;
         String qty = ((TextBox)e.Item.FindControl("QtyTextBox")).Text;
         String price = ((TextBox)e.Item.FindControl("PriceTextBox")).Text;
         // 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.
         // Filter the CartView for the selected item and remove it from
         // the data source.
         CartView.RowFilter = "Item='" + item + "'";
         if (CartView.Count > 0)
         {
            CartView.Delete(0);
         }
         CartView.RowFilter = "";
         // ***************************************************************
         // Insert data validation code here. Make sure to validate the
         // values entered by the user before converting to the appropriate
         // data types and updating the data source.
         // ***************************************************************
         // Add a new entry to replace the previous item.
         DataRow dr = Cart.NewRow();
         dr[0] = qty;
         dr[1] = item;
         // If necessary, remove the '$' character from the price before
         // converting the price 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 DataList to the data source to refresh
         // the control.
         ItemsList.EditItemIndex = -1;
         BindList();
      }
   </script>
</head>
<body>
   <form id="form1" runat="server">
      <h3>DataList Edit Example</h3>
      Click <b>Edit</b> to edit the values of the item.
      <br /><br />
       
      <asp:DataList id="ItemsList"
           GridLines="Both"
           RepeatColumns="3"
           RepeatDirection="Horizontal"
           CellPadding="3"
           CellSpacing="0"
           OnEditCommand="Edit_Command"
           OnUpdateCommand="Update_Command"
           OnDeleteCommand="Delete_Command"
           OnCancelCommand="Cancel_Command"
           runat="server">
         <HeaderStyle BackColor="#aaaadd">
         </HeaderStyle>
         <AlternatingItemStyle BackColor="Gainsboro">
         </AlternatingItemStyle>
         <EditItemStyle BackColor="yellow">
         </EditItemStyle>
         <HeaderTemplate>
            Items
         </HeaderTemplate>
         
         <ItemTemplate>
            Item:
            <%# DataBinder.Eval(Container.DataItem, "Item") %> 
            <br />
            Quantity:
            <%# DataBinder.Eval(Container.DataItem, "Qty") %>
            <br />
            Price:
            <%# DataBinder.Eval(Container.DataItem, "Price", "{0:c}") %>
            <br />
            <asp:LinkButton id="EditButton" 
                 Text="Edit" 
                 CommandName="Edit"
                 runat="server"/>
         </ItemTemplate>
              
         <EditItemTemplate>
            Item:
            <asp:Label id="ItemLabel" 
                 Text='<%# DataBinder.Eval(Container.DataItem, "Item") %>' 
                 runat="server"/>
            <br />
            Quantity:
            <asp:TextBox id="QtyTextBox" 
                 Text='<%# DataBinder.Eval(Container.DataItem, "Qty") %>' 
                 runat="server"/>
            <br />
            Price:
            <asp:TextBox id="PriceTextBox" 
                 Text='<%# DataBinder.Eval(Container.DataItem, "Price", "{0:c}") %>' 
                 runat="server"/>
            <br />
            <asp:LinkButton id="UpdateButton" 
                 Text="Update" 
                 CommandName="Update" 
                 runat="server"/>
            <asp:LinkButton id="DeleteButton" 
                 Text="Delete" 
                 CommandName="Delete" 
                 runat="server"/>
            <asp:LinkButton id="CancelButton" 
                 Text="Cancel" 
                 CommandName="Cancel" 
                 runat="server"/>
         </EditItemTemplate>
      </asp:DataList>
   </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" >
<head>
    <title>DataList Edit Example</title>
<script runat="server">
      ' The Cart and CartView objects temporarily store the data source
      ' for the DataList control while the page is being processed.
      Dim Cart As DataTable = New DataTable()
      Dim CartView As DataView
 
      Sub Page_Load(sende 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
            BindList()
         End If
                   
      End Sub
      Sub BindList() 
         ' Set the data source and bind to the DataList control.
         ItemsList.DataSource = CartView
         ItemsList.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 Edit_Command(sender As Object, e As DataListCommandEventArgs) 
         ' Set the EditItemIndex property to the index of the item clicked
         ' in the DataList control to enable editing for that item. Be sure
         ' to rebind the DataList to the data source to refresh the control.
         ItemsList.EditItemIndex = e.Item.ItemIndex
         BindList()
      End Sub
      Sub Cancel_Command(sender As Object, e As DataListCommandEventArgs) 
         ' Set the EditItemIndex property to -1 to exit editing mode. Be sure
         ' to rebind the DataList to the data source to refresh the control.
         ItemsList.EditItemIndex = -1
         BindList()
      End Sub
      Sub Delete_Command(sender As Object, e As DataListCommandEventArgs) 
         ' Retrieve the name of the item to remove.
         Dim item As String = (CType(e.Item.FindControl("ItemLabel"), Label)).Text
         ' Filter the CartView for the selected item and remove it from
         ' the data source.
         CartView.RowFilter = "Item='" & item & "'"
         If CartView.Count > 0 Then 
       
            CartView.Delete(0)
         
         End If
         CartView.RowFilter = ""
         ' Set the EditItemIndex property to -1 to exit editing mode. Be sure 
         ' to rebind the DataList to the data source to refresh the control.
         ItemsList.EditItemIndex = -1
         BindList()
      End Sub
      Sub Update_Command(sender As Object, e As DataListCommandEventArgs) 
         ' Retrieve the updated values from the selected item.
         Dim item As String = _
             (CType(e.Item.FindControl("ItemLabel"), Label)).Text
         Dim qty As String = _
             (CType(e.Item.FindControl("QtyTextBox"), TextBox)).Text
         Dim price As String = _
             (CType(e.Item.FindControl("PriceTextBox"), TextBox)).Text
         ' 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.
         ' Filter the CartView for the selected item and remove it from 
         ' the data source.
         CartView.RowFilter = "Item='" & item & "'"
         If CartView.Count > 0 Then 
       
            CartView.Delete(0)
         
         End If
         CartView.RowFilter = ""
         ' ***************************************************************
         ' Insert data validation code here. Make sure to validate the
         ' values entered by the user before converting to the appropriate
         ' data types and updating the data source.
         ' ***************************************************************
         ' Add a new entry to replace the previous item.
         Dim dr As DataRow = Cart.NewRow()
         dr(0) = qty
         dr(1) = item
         ' If necessary, remove the '$' character from the price before 
         ' converting the price 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 DataList to the data source to refresh 
         ' the control.
         ItemsList.EditItemIndex = -1
         BindList()
      End Sub
   </script>
</head>
<body>
   <form id="form1" runat="server">
      <h3>DataList Edit Example</h3>
      Click <b>Edit</b> to edit the values of the item.
      <br /><br />
       
      <asp:DataList id="ItemsList"
           GridLines="Both"
           RepeatColumns="3"
           RepeatDirection="Horizontal"
           CellPadding="3"
           CellSpacing="0"
           OnEditCommand="Edit_Command"
           OnUpdateCommand="Update_Command"
           OnDeleteCommand="Delete_Command"
           OnCancelCommand="Cancel_Command"
           runat="server">
         <HeaderStyle BackColor="#aaaadd">
         </HeaderStyle>
         <AlternatingItemStyle BackColor="Gainsboro">
         </AlternatingItemStyle>
         <EditItemStyle BackColor="yellow">
         </EditItemStyle>
         <HeaderTemplate>
            Items
         </HeaderTemplate>
         
         <ItemTemplate>
            Item:
            <%# DataBinder.Eval(Container.DataItem, "Item") %> 
            <br />
            Quantity:
            <%# DataBinder.Eval(Container.DataItem, "Qty") %>
            <br />
            Price:
            <%# DataBinder.Eval(Container.DataItem, "Price", "{0:c}") %>
            <br />
            <asp:LinkButton id="EditButton" 
                 Text="Edit" 
                 CommandName="Edit"
                 runat="server"/>
         </ItemTemplate>
              
         <EditItemTemplate>
            Item:
            <asp:Label id="ItemLabel" 
                 Text='<%# DataBinder.Eval(Container.DataItem, "Item") %>' 
                 runat="server"/>
            <br />
            Quantity:
            <asp:TextBox id="QtyTextBox" 
                 Text='<%# DataBinder.Eval(Container.DataItem, "Qty") %>' 
                 runat="server"/>
            <br />
            Price:
            <asp:TextBox id="PriceTextBox" 
                 Text='<%# DataBinder.Eval(Container.DataItem, "Price", "{0:c}") %>' 
                 runat="server"/>
            <br />
            <asp:LinkButton id="UpdateButton" 
                 Text="Update" 
                 CommandName="Update" 
                 runat="server"/>
            <asp:LinkButton id="DeleteButton" 
                 Text="Delete" 
                 CommandName="Delete" 
                 runat="server"/>
            <asp:LinkButton id="CancelButton" 
                 Text="Cancel" 
                 CommandName="Cancel" 
                 runat="server"/>
         </EditItemTemplate>
      </asp:DataList>
   </form>
</body>
</html>
下面的代码示例演示如何指定事件处理程序,以及如何以编程方式将它们添加到 方法中的 Page_Load 事件。
<%@ 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" >
<head>
    <title>DataList Edit Example</title>
<script runat="server">
      // The Cart and CartView objects temporarily store the data source
      // for the DataList 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 DataList 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)
         {
            BindList();
         }
         // Manually register the event-handling methods.
         ItemsList.EditCommand += 
             new DataListCommandEventHandler(this.Edit_Command);
         ItemsList.UpdateCommand += 
             new DataListCommandEventHandler(this.Update_Command);
         ItemsList.DeleteCommand += 
             new DataListCommandEventHandler(this.Delete_Command);
         ItemsList.CancelCommand += 
             new DataListCommandEventHandler(this.Cancel_Command);
                   
      }
      void BindList() 
      {
         // Set the data source and bind to the DataList control.
         ItemsList.DataSource = CartView;
         ItemsList.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 Edit_Command(Object sender, DataListCommandEventArgs e) 
      {
         // Set the EditItemIndex property to the index of the item clicked
         // in the DataList control to enable editing for that item. Be sure
         // to rebind the DataList to the data source to refresh the control.
         ItemsList.EditItemIndex = e.Item.ItemIndex;
         BindList();
      }
      void Cancel_Command(Object sender, DataListCommandEventArgs e) 
      {
         // Set the EditItemIndex property to -1 to exit editing mode. Be sure
         // to rebind the DataList to the data source to refresh the control.
         ItemsList.EditItemIndex = -1;
         BindList();
      }
      void Delete_Command(Object sender, DataListCommandEventArgs e) 
      { 
         // Retrieve the name of the item to remove.
         String item = ((Label)e.Item.FindControl("ItemLabel")).Text;
         // Filter the CartView for the selected item and remove it from
         // the data source.
         CartView.RowFilter = "Item='" + item + "'";
         if (CartView.Count > 0) 
         {
            CartView.Delete(0);
         }
         CartView.RowFilter = "";
         // Set the EditItemIndex property to -1 to exit editing mode. Be sure
         // to rebind the DataList to the data source to refresh the control.
         ItemsList.EditItemIndex = -1;
         BindList();
      }
      void Update_Command(Object sender, DataListCommandEventArgs e) 
      {
         // Retrieve the updated values from the selected item.
         String item = ((Label)e.Item.FindControl("ItemLabel")).Text;
         String qty = ((TextBox)e.Item.FindControl("QtyTextBox")).Text;
         String price = ((TextBox)e.Item.FindControl("PriceTextBox")).Text;
         // 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.
         // Filter the CartView for the selected item and remove it from
         // the data source.
         CartView.RowFilter = "Item='" + item + "'";
         if (CartView.Count > 0)
         {
            CartView.Delete(0);
         }
         CartView.RowFilter = "";
         // ***************************************************************
         // Insert data validation code here. Make sure to validate the
         // values entered by the user before converting to the appropriate
         // data types and updating the data source.
         // ***************************************************************
         // Add a new entry to replace the previous item.
         DataRow dr = Cart.NewRow();
         dr[0] = qty;
         dr[1] = item;
         // If necessary, remove the '$' character from the price before
         // converting the price 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 DataList to the data source to refresh
         // the control.
         ItemsList.EditItemIndex = -1;
         BindList();
      }
   </script>
</head>
<body>
   <form id="form1" runat="server">
      <h3>DataList Edit Example</h3>
      Click <b>Edit</b> to edit the values of the item.
      <br /><br />
       
      <asp:DataList id="ItemsList"
           GridLines="Both"
           RepeatColumns="3"
           RepeatDirection="Horizontal"
           CellPadding="3"
           CellSpacing="0"
           runat="server">
         <HeaderStyle BackColor="#aaaadd">
         </HeaderStyle>
         <AlternatingItemStyle BackColor="Gainsboro">
         </AlternatingItemStyle>
         <EditItemStyle BackColor="yellow">
         </EditItemStyle>
         <HeaderTemplate>
            Items
         </HeaderTemplate>
         
         <ItemTemplate>
            Item:
            <%# DataBinder.Eval(Container.DataItem, "Item") %> 
            <br />
            Quantity:
            <%# DataBinder.Eval(Container.DataItem, "Qty") %>
            <br />
            Price:
            <%# DataBinder.Eval(Container.DataItem, "Price", "{0:c}") %>
            <br />
            <asp:LinkButton id="EditButton" 
                 Text="Edit" 
                 CommandName="Edit"
                 runat="server"/>
         </ItemTemplate>
              
         <EditItemTemplate>
            Item:
            <asp:Label id="ItemLabel" 
                 Text='<%# DataBinder.Eval(Container.DataItem, "Item") %>' 
                 runat="server"/>
            <br />
            Quantity:
            <asp:TextBox id="QtyTextBox" 
                 Text='<%# DataBinder.Eval(Container.DataItem, "Qty") %>' 
                 runat="server"/>
            <br />
            Price:
            <asp:TextBox id="PriceTextBox" 
                 Text='<%# DataBinder.Eval(Container.DataItem, "Price", "{0:c}") %>' 
                 runat="server"/>
            <br />
            <asp:LinkButton id="UpdateButton" 
                 Text="Update" 
                 CommandName="Update" 
                 runat="server"/>
            <asp:LinkButton id="DeleteButton" 
                 Text="Delete" 
                 CommandName="Delete" 
                 runat="server"/>
            <asp:LinkButton id="CancelButton" 
                 Text="Cancel" 
                 CommandName="Cancel" 
                 runat="server"/>
         </EditItemTemplate>
      </asp:DataList>
   </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" >
<head>
    <title>DataList Edit Example</title>
<script runat="server">
      ' The Cart and CartView objects temporarily store the data source
      ' for the DataList control while the page is being processed.
      Dim Cart As DataTable = New DataTable()
      Dim CartView As DataView
 
      Sub Page_Load(sende 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
            BindList()
         End If
         ' Manually register the event-handling methods.
         AddHandler ItemsList.EditCommand, AddressOf Edit_Command
         AddHandler ItemsList.UpdateCommand, AddressOf Update_Command
         AddHandler ItemsList.DeleteCommand, AddressOf Delete_Command
         AddHandler ItemsList.CancelCommand, AddressOf Cancel_Command
                   
      End Sub
      Sub BindList() 
         ' Set the data source and bind to the DataList control.
         ItemsList.DataSource = CartView
         ItemsList.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 Edit_Command(sender As Object, e As DataListCommandEventArgs) 
         ' Set the EditItemIndex property to the index of the item clicked
         ' in the DataList control to enable editing for that item. Be sure
         ' to rebind the DataList to the data source to refresh the control.
         ItemsList.EditItemIndex = e.Item.ItemIndex
         BindList()
      End Sub
      Sub Cancel_Command(sender As Object, e As DataListCommandEventArgs) 
         ' Set the EditItemIndex property to -1 to exit editing mode. Be sure
         ' to rebind the DataList to the data source to refresh the control.
         ItemsList.EditItemIndex = -1
         BindList()
      End Sub
      Sub Delete_Command(sender As Object, e As DataListCommandEventArgs) 
         ' Retrieve the name of the item to remove.
         Dim item As String = (CType(e.Item.FindControl("ItemLabel"), Label)).Text
         ' Filter the CartView for the selected item and remove it from 
         ' the data source.
         CartView.RowFilter = "Item='" & item & "'"
         If CartView.Count > 0 Then 
       
            CartView.Delete(0)
         
         End If
         CartView.RowFilter = ""
         ' Set the EditItemIndex property to -1 to exit editing mode. Be sure 
         ' to rebind the DataList to the data source to refresh the control.
         ItemsList.EditItemIndex = -1
         BindList()
      End Sub
      Sub Update_Command(sender As Object, e As DataListCommandEventArgs) 
         ' Retrieve the updated values from the selected item.
         Dim item As String = _
             (CType(e.Item.FindControl("ItemLabel"), Label)).Text
         Dim qty As String = _
             (CType(e.Item.FindControl("QtyTextBox"), TextBox)).Text
         Dim price As String = _
             (CType(e.Item.FindControl("PriceTextBox"), TextBox)).Text
         ' 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.
         ' Filter the CartView for the selected item and remove it from 
         ' the data source.
         CartView.RowFilter = "Item='" & item & "'"
         If CartView.Count > 0 Then 
       
            CartView.Delete(0)
         
         End If
         CartView.RowFilter = ""
         ' ***************************************************************
         ' Insert data validation code here. Make sure to validate the
         ' values entered by the user before converting to the appropriate
         ' data types and updating the data source.
         ' ***************************************************************
         ' Add a new entry to replace the previous item.
         Dim dr As DataRow = Cart.NewRow()
         dr(0) = qty
         dr(1) = item
         ' If necessary, remove the '$' character from the price before 
         ' converting the price 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 DataList to the data source to refresh 
         ' the control.
         ItemsList.EditItemIndex = -1
         BindList()
      End Sub
   </script>
</head>
<body>
   <form id="form1" runat="server">
      <h3>DataList Edit Example</h3>
      Click <b>Edit</b> to edit the values of the item.
      <br /><br />
       
      <asp:DataList id="ItemsList"
           GridLines="Both"
           RepeatColumns="3"
           RepeatDirection="Horizontal"
           CellPadding="3"
           CellSpacing="0"
           OnEditCommand="Edit_Command"
           OnUpdateCommand="Update_Command"
           OnDeleteCommand="Delete_Command"
           OnCancelCommand="Cancel_Command"
           runat="server">
         <HeaderStyle BackColor="#aaaadd">
         </HeaderStyle>
         <AlternatingItemStyle BackColor="Gainsboro">
         </AlternatingItemStyle>
         <EditItemStyle BackColor="yellow">
         </EditItemStyle>
         <HeaderTemplate>
            Items
         </HeaderTemplate>
         
         <ItemTemplate>
            Item:
            <%# DataBinder.Eval(Container.DataItem, "Item") %> 
            <br />
            Quantity:
            <%# DataBinder.Eval(Container.DataItem, "Qty") %>
            <br />
            Price:
            <%# DataBinder.Eval(Container.DataItem, "Price", "{0:c}") %>
            <br />
            <asp:LinkButton id="EditButton" 
                 Text="Edit" 
                 CommandName="Edit"
                 runat="server"/>
         </ItemTemplate>
              
         <EditItemTemplate>
            Item:
            <asp:Label id="ItemLabel" 
                 Text='<%# DataBinder.Eval(Container.DataItem, "Item") %>' 
                 runat="server"/>
            <br />
            Quantity:
            <asp:TextBox id="QtyTextBox" 
                 Text='<%# DataBinder.Eval(Container.DataItem, "Qty") %>' 
                 runat="server"/>
            <br />
            Price:
            <asp:TextBox id="PriceTextBox" 
                 Text='<%# DataBinder.Eval(Container.DataItem, "Price", "{0:c}") %>' 
                 runat="server"/>
            <br />
            <asp:LinkButton id="UpdateButton" 
                 Text="Update" 
                 CommandName="Update" 
                 runat="server"/>
            <asp:LinkButton id="DeleteButton" 
                 Text="Delete" 
                 CommandName="Delete" 
                 runat="server"/>
            <asp:LinkButton id="CancelButton" 
                 Text="Cancel" 
                 CommandName="Cancel" 
                 runat="server"/>
         </EditItemTemplate>
      </asp:DataList>
   </form>
</body>
</html>
注解
单击CancelCommand控件中DataList项的按钮时Cancel,将引发 事件。
单击DeleteCommand控件中DataList项的按钮时Delete,将引发 事件。
单击EditCommand控件中DataList项的按钮时Edit,将引发 事件。
单击 ItemCommand 控件中 DataList 项的任何按钮时,将引发 事件。 这允许你以编程方式测试单击特定命令按钮的时间并采取适当的操作。 此事件通常用于处理控件的 DataList 自定义命令按钮。
单击UpdateCommand控件中DataList项的按钮时Update,将引发 事件。
创建 DataListCommandEventHandler 委托时,需要标识将处理该事件的方法。 若要将事件与事件处理程序关联,请将该委托的一个实例添加到事件中。 除非移除了该委托,否则每当发生该事件时就会调用事件处理程序。 有关事件处理程序委托的详细信息,请参阅 处理和引发事件。
扩展方法
| GetMethodInfo(Delegate) | 获取指示指定委托表示的方法的对象。 |