ASP.NET DetailsViewのホームへ戻る

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]のタブをクリックして切り替えたら、右クリックから[貼り付け]を選択します。デザイナにDropDownList1GridView1DetailsView1lblResultのオブジェクトが作成されます。

 

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のツールバーから[デバッグの開始]ボタンをクリックしてブラウザに表示します。ブラウザが起動されて、DropDownListCategoriesテーブル、GridViewProductsテーブルが表示されます。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>

 

レコードが正常に削除されたかどうか調べるには、DetailsViewItemDeletedイベントハンドラを追加します。このイベントハンドラでは、DetailsViewInsertEventArgsオブジェクトのExceptionプロパティをチェックします。Exceptionに例外エラー情報が格納されているときは、Messageプロパティの内容をLabelTextプロパティに設定して例外エラー情報を表示します。例外エラーが発生しても処理を続行するには、ExceptionHandledプロパティに「True」を設定します。ExceptionHandeldに「False」を設定したときは、ASP.NETのエラーメッセージが表示されて処理が中断します。

 

レコードが正常に削除されたときは、GridViewDataBindメソッドを実行して削除されたレコードをGridViewから除去します。

 

 

Tip

レコードの削除時に確認のメッセージを表示するには (DetailsView04Tip1.aspx)

 

DetailsViewから[削除]ボタンをクリックしてレコードを削除するとき、確認メッセージを表示するには、CommandFieldTemlateFieldに変換(※)します。<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="編集" />&nbsp;

        <asp:Button ID="Button2" runat="server"

          CommandName="New" Text="新規作成" />&nbsp;

        <asp:Button ID="Button3" runat="server"

          CommandName="Delete" Text="削除"

          OnClientClick="return confirm('削除してよろしいですか?');" />

        </ItemTemplate>

    </asp:TemplateField>

  </Fields>

</asp:DetailsView>

 

 

DetailsViewから[削除]ボタンをクリックすると確認メッセージが表示される

 

 

ASP.NET DetailsViewのホームへ戻る