方法 : ユーザーが DataList Web サーバー コントロール内の項目を削除できるようにする
更新 : 2007 年 11 月
ユーザーが DataList コントロールの項目を削除できるようにするには、さまざまな方法があります。たとえば、[削除] ボタンを項目に含めて、ユーザーがこのボタンをクリックしたときに項目を削除する方法があります。
他にも、個別の項目にチェック ボックスを含める方法があります。ユーザーは削除する項目をすべてオンにしてから別の [削除] ボタンをクリックすることで、項目をまとめて削除できます。この方法は、MSN Hotmail のようなプログラムで使用されます。
ユーザーが個別の項目を削除できるようにするには
データ ソース コントロールをページに追加します。
データ ソース コントロールに対して削除コマンドまたはメソッドを定義します。
たとえば、SqlDataSource コントロールを使用している場合は、次の例のようにデータ ソース コントロールの DeleteCommand プロパティを ID のプレースフォルダを含む SQL 削除ステートメントに設定します。
DELETE FROM Categories WHERE CategoryID = @CategoryID
ObjectDataSource コントロールを使用している場合は、DeleteMethod プロパティを削除を実行するメソッド名に設定します。
データ ソース コントロールでは、削除するレコードの ID のパラメータを 1 つ含む DeleteParameters プロパティのエントリを作成します。
たとえば、SqlDataSource 要素は次のようになります。
<asp:SqlDataSource ID="SqlDataSource1" Runat="server" ConnectionString= "<%$ ConnectionStrings:NorthwindConnectionString %>" DeleteCommand="DELETE FROM [Categories] WHERE [CategoryID] = @CategoryID"> <DeleteParameters> <asp:Parameter Type="Int32" Name="CategoryID"> </asp:Parameter> </DeleteParameters> </asp:SqlDataSource>
メモ : その他の SelectCommand や UpdateCommand などのコマンドは、この例には示されていません。
ObjectDataSource 要素は次のようになります。
<asp:ObjectDataSource ID="ObjectDataSource1" Runat="server" DeleteMethod="DeleteCategory()"> <DeleteParameters> <asp:Parameter Name="example"></asp:Parameter> </DeleteParameters> </asp:ObjectDataSource>
DataList コントロールで、DataKeyField プロパティをレコードの削除元のテーブルの主キーに設定します。
ItemTemplate (および使用している場合は AlternatingItemTemplate) で、Button または LinkButton Web サーバー コントロールを追加します。
ボタンの CommandName プロパティを delete に設定します。
DataList コントロール要素のマークアップは、次のようになります。
<asp:DataList ID="DataList1" Runat="server" DataSourceID="SqlDataSource1" DataKeyField="CategoryID" OnDeleteCommand="DataList1_DeleteCommand"> <ItemTemplate> CategoryName: <asp:Label ID="CategoryNameLabel" Runat="server" Text='<%# Eval("CategoryName") %>'> </asp:Label> <br /> Description: <asp:Label ID="DescriptionLabel" Runat="server" Text='<%# Eval("Description") %>'> </asp:Label> <br /> <asp:Button ID="Delete" Runat="server" Text="Delete" CommandName="delete" /> </ItemTemplate> </asp:DataList>
DataList コントロールの DeleteCommand イベントのイベント ハンドラを作成します。このメソッドでは次の処理を行います。
DataList コントロールの DataKeys コレクションから削除するレコードの ID を取得します。現在のレコードのキーは、現在の項目の ItemIndex プロパティによって返されたインデックスを使用して取得できます。
手順 3. で作成したパラメータの DefaultValue プロパティを設定します。
データ ソース コントロールの Delete メソッドを呼び出します。
次のコードでは、データ ソースとして SqlDataSource1 という名前の SqlDataSource コントロールを使用して、これらのタスクを説明します。
Protected Sub DataList1_DeleteCommand(ByVal source As Object, ByVal e As DataListCommandEventArgs) Dim id As Integer = _ CInt(DataList1.DataKeys(e.Item.ItemIndex)) SqlDataSource1.DeleteParameters("CategoryID").DefaultValue _ = id SqlDataSource1.Delete() End Sub
protected void DataList1_DeleteCommand(object source, DataListCommandEventArgs e) { int id = (int)DataList1.DataKeys[e.Item.ItemIndex]; SqlDataSource1.DeleteParameters["CategoryID"].DefaultValue = id; SqlDataSource1.Delete(); }
ユーザーが複数の項目を一度に削除できるようにするには
データ ソース コントロールをページに追加し、その削除コマンドまたはメソッドを構成し、上の手順で説明されているとおりにパラメータを作成します。
DataList コントロールの ItemTemplate (および使用している場合は AlternatingItemTemplate) で、CheckBox Web サーバー コントロールを追加して、その ID プロパティを "Delete" など特定の名前に設定します。CheckBox コントロールの AutoPostBack プロパティが false に設定されていることを確認してください。
Button Web サーバー コントロールをページに追加します。Text プロパティを "Delete All" に設定し、ID プロパティを DeleteAll に設定します。このボタンが、DataList テンプレートのいずれかに追加されることはありません。
[すべて削除] ボタンの Click イベントのメソッドを作成します。このメソッドでは次の処理を行います。
項目の FindControl メソッドを使用して手順 1. で追加した CheckBox コントロールを取得し、その Checked プロパティを調べます。
ボックスがオンになっている場合は、対応する項目をデータ ソースから削除します。
次の例は、上記の手順を使用して項目をまとめて削除する DeleteAll ボタンのイベント ハンドラを示しています。
[Visual Basic]
[C#]