■DetailsViewにレコードの削除機能を追加する (DetailsView04.aspx)
DetailsViewからレコードを削除するサンプルを作成します。このサンプルでは、以下のノウハウを習得することができます。
▼ DetailsViewにレコードを削除するボタンを表示する方法
▼ レコードが正常に削除されたか調べる方法
▼ レコードの削除処理でエラーが発生したときにエラーメッセージを表示して処理を続行する方法
▼ 削除したレコードをGridViewに反映する方法

DetailsViewから[削除]ボタンをクリックする

DetailsViewからレコードが削除されると不可視状態になる(GridViewからもレコードが削除される)
図DetailsViewにレコードの削除機能を付加
1. 新規Webページ作成
ソリューションエクスプローラのプロジェクトの右クリックから[新しい項目の追加]を選択して、新規Webページ「DetailsView04.aspx」を作成します。
2. コントロール作成
デザイナにDetailsView04.aspxが表示されたら、[DetailsView03.aspx]のタブをクリックして切り替えます。[Ctrl]+[A]を押してDetailsView03.apsxのすべてのコントロールを選択したら、右クリックから[コピー]を選択します。デザイナから[DetailsView04.aspx]のタブをクリックして切り替えたら、右クリックから[貼り付け]を選択します。デザイナにDropDownList1、GridView1、DetailsView1、lblResultのオブジェクトが作成されます。
「DetailsViewタスク」メニューから「削除を有効にする」をチェックして、DetailsViewに[削除]ボタンを表示します。

図 「DetailsViewタスク」から「削除を有効にする」をチェックして[削除]ボタンを表示する
3. イベントハンドラ追加
デザイナの右クリックから[コードの表示]を選択します。コードビューが表示されたら、「(全般)」と「(宣言)」のドロップダウンリストから[DetailsView1]、[ItemDeleted]を選択します。DetailsView1_ItemDeletedイベントハンドラが作成されたら、次のコードを追加します。
Protected Sub DetailsView1_ItemDeleted(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DetailsViewDeletedEventArgs) Handles DetailsView1.ItemDeleted
If Not IsNothing(e.Exception) Then
lblResult.Text = String.Format("削除処理中に次のエラー発生!<br />{0}", _
e.Exception.Message)
e.ExceptionHandled = True
End If
GridView1.DataBind()
End Sub
4. ブラウザに表示
VWD 2005のツールバーから[デバッグの開始]ボタンをクリックしてブラウザに表示します。ブラウザが起動されて、DropDownListにCategoriesテーブル、GridViewにProductsテーブルが表示されます。GridViewから[選択]ボタンをクリックするとDetailsViewに選択した商品の詳細が表示されます。DetailsViewから[削除]ボタンをクリックするとレコードが削除されます。削除しようとした商品が受注明細(OrderDetails)テーブルに存在するときは、削除できない旨のエラーメッセージが表示されます。正常に削除されるか確認するには、DetailsView01.aspxを実行して新規商品レコードを作成して、その商品レコードを削除してください。

図 DetailsViewから[削除]ボタンをクリックしてレコードを削除する
◆解説
DetailsViewに[削除]ボタンを表示するには、SqlDataSourceを作成するときに、DELETEステートメントを生成します。デザイナから「DetailsViewタスク」メニューを表示すると「削除を有効にする」チェックボックスが表示されますのでチェックマークを付けると、DetailsViewに[削除]ボタンが表示されます。
<asp:DetailsView ID="DetailsView1" runat="server"
AutoGenerateRows="False" DataSourceID="SqlDataSource3"・・・>
<Fields>
・・・
<asp:CommandField ButtonType="Button"
ShowDeleteButton="True"
ShowEditButton="True"
ShowInsertButton="True" />
</Fields>
</asp:DetailsView>
<asp:SqlDataSource ID="SqlDataSource3" runat="server"
ConnectionString="<%$ ConnectionStrings:NwindSQLConnectionString %>"
DeleteCommand="DELETE FROM [Products] WHERE [ProductID] = @original_ProductID">
<DeleteParameters>
<asp:Parameter Name="original_ProductID" Type="Int32" />
</DeleteParameters>
</asp:SqlDataSource>
レコードが正常に削除されたかどうか調べるには、DetailsViewにItemDeletedイベントハンドラを追加します。このイベントハンドラでは、DetailsViewInsertEventArgsオブジェクトのExceptionプロパティをチェックします。Exceptionに例外エラー情報が格納されているときは、Messageプロパティの内容をLabelのTextプロパティに設定して例外エラー情報を表示します。例外エラーが発生しても処理を続行するには、ExceptionHandledプロパティに「True」を設定します。ExceptionHandeldに「False」を設定したときは、ASP.NETのエラーメッセージが表示されて処理が中断します。
レコードが正常に削除されたときは、GridViewのDataBindメソッドを実行して削除されたレコードをGridViewから除去します。
Tip
|
レコードの削除時に確認のメッセージを表示するには (DetailsView04Tip1.aspx)
DetailsViewから[削除]ボタンをクリックしてレコードを削除するとき、確認メッセージを表示するには、CommandFieldをTemlateFieldに変換(※)します。<ItemTemplate>…</ItemTemplate>のButton3に、OnClentClickプロパティを追加して確認のメッセージを表示します。
<asp:Button ID="Button3" runat="server" CommandName="Delete" Text="削除" OnClientClick="return confirm('削除してよろしいですか?');" />
※「DetailsViewタスク」メニューから[フィールドの編集]を選択して「フィールド」を表示したら、「選択されたフィールド」から[CommandField]を選択して「このフィールドをTemplateFieldに変換します。」をクリックします。
<asp:DetailsView ID="DetailsView1" runat="server" AutoGenerateRows="False" DataSourceID="SqlDataSource3"・・・> <Fields> ・・・ <asp:TemplateField ShowHeader="False"> <ItemTemplate> <asp:Button ID="Button1" runat="server" CommandName="Edit" Text="編集" /> <asp:Button ID="Button2" runat="server" CommandName="New" Text="新規作成" /> <asp:Button ID="Button3" runat="server" CommandName="Delete" Text="削除" OnClientClick="return confirm('削除してよろしいですか?');" /> </ItemTemplate> </asp:TemplateField> </Fields> </asp:DetailsView>
図DetailsViewから[削除]ボタンをクリックすると確認メッセージが表示される
|