DataList.OnDeleteCommand メソッド
DeleteCommand イベントを発生させます。これにより、イベントのカスタム ハンドラを作成できます。
名前空間: System.Web.UI.WebControls
アセンブリ: System.Web (system.web.dll 内)
構文
'宣言
Protected Overridable Sub OnDeleteCommand ( _
e As DataListCommandEventArgs _
)
'使用
Dim e As DataListCommandEventArgs
Me.OnDeleteCommand(e)
protected virtual void OnDeleteCommand (
DataListCommandEventArgs e
)
protected:
virtual void OnDeleteCommand (
DataListCommandEventArgs^ e
)
protected void OnDeleteCommand (
DataListCommandEventArgs e
)
protected function OnDeleteCommand (
e : DataListCommandEventArgs
)
適用できません。
パラメータ
- e
イベント データを格納している DataListCommandEventArgs。
解説
OnDeleteCommand メソッドを使用して DeleteCommand イベントのカスタム ハンドラを提供します。
DeleteCommand イベントは、DataList コントロールの項目に対して Delete ボタンがクリックされたときに発生します。
DeleteCommand イベントの典型的なハンドラはデータ ソースから選択した項目を削除し、データを DataList コントロールに再連結します。
イベントが発生すると、デリゲートを使用してイベント ハンドラが呼び出されます。詳細については、「方法 : Web フォーム アプリケーションでイベントを利用する」を参照してください。
OnDeleteCommand メソッドを使用すると、デリゲートを結び付けずに、派生クラスでイベントを処理することもできます。派生クラスでイベントを処理する場合は、この手法をお勧めします。
継承元へのメモ : 派生クラスで OnDeleteCommand をオーバーライドする場合は、登録されているデリゲートがイベントを受け取ることができるように、基本クラスの OnDeleteCommand メソッドを呼び出してください。
使用例
DeleteCommand イベントのハンドラを指定およびコード化する方法を次のコード例に示します。この例では、Delete ボタンをクリックすると DataList コントロール内の選択された項目が削除されます。
メモ : |
---|
次のコード サンプルはシングルファイル コード モデルを使用しており、分離コード ファイルに直接コピーされた場合は正常に動作しない可能性があります。このコード サンプルは、拡張子が .aspx の空のテキスト ファイルにコピーする必要があります。Web フォームのコード モデルの詳細については、「ASP.NET Web ページのコード モデル」を参照してください。 |
<%@ 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 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
' 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>
<%@ 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>
プラットフォーム
Windows 98,Windows Server 2000 SP4,Windows CE,Windows Millennium Edition,Windows Mobile for Pocket PC,Windows Mobile for Smartphone,Windows Server 2003,Windows XP Media Center Edition,Windows XP Professional x64 Edition,Windows XP SP2,Windows XP Starter Edition
Microsoft .NET Framework 3.0 は Windows Vista,Microsoft Windows XP SP2,および Windows Server 2003 SP1 でサポートされています。
バージョン情報
.NET Framework
サポート対象 : 3.0,2.0,1.1,1.0
参照
関連項目
DataList クラス
DataList メンバ
System.Web.UI.WebControls 名前空間
DeleteCommand
OnCancelCommand
OnEditCommand
OnUpdateCommand
DataListCommandEventArgs