GridView 基本データの削除

ASP.NET 2.0 GridView サンプル

目次に戻るには、こちらをクリックしてください。

これまでに説明したサンプルは、すべて、読み取り専用の GridView です。これらのサンプルでは、データのドリル ダウンや、データの並べ替え、ページングなどが可能ですが、エンド ユーザーは、データを表示するのみです。しかし、ユーザーに、Web アプリケーションの基本となるデータの削除、または更新を許可する場合もあります。データを編集、および削除する技術は多数ありますが、その中には、GridView の組み込みの削除、および編集機能を使用する方法があります。

データをページング、または並べ替えする場合と同様に、SqlDataSource を使用してデータベースから直接取得しているデータの削除は、数回のマウス操作のみで簡単に実現できます。しかし、ObjectDataSource を使用して読み込んだデータを GridView から削除する場合は、基本データ アクセス層クラスで、データを削除するメソッドを提供する必要があります。

このセクションでは、SqlDataSource、または ObjectDataSource を使用する両方の場合について、GridView からデータを削除する方法を説明します。また、GridView の削除機能に対してクライアント サイドの確認を追加する方法も説明します。これは、ユーザーが誤ってデータを削除してしまうのを防ぐのに役立ちます。

SqlDataSource データの削除

GridView で表示するデータのフィルタについて説明したセクションでは、DropDownList で選択した特定の商品の注文詳細データを GridView で表示する方法を確認しました。このサンプルを拡張して、注文詳細を削除する機能を追加します。

GridView からの削除を有効にするには、SqlDataSource を拡張し、SELECT ステートメントのほかに、DELETE ステートメントも追加する必要があります。DELETE ステートメントは、SqlDataSource のウィザードで簡単に追加できます。ステップの 2 番目で、テーブルまたはビューと、戻すフィールドを選択します。ここの [詳細設定] ボタンをクリックすると、図 35 に示すダイアログ ボックスが表示されます。

ms972940.gridview_fg35(ja-jp,MSDN.10).gif

図 35


一番上の [INSERT、UPDATE、および DELETE ステートメントの生成] チェック ボックスをオンにすると、SqlDataSource は、自動的に、必要な INSERT、UPDATE、および DELETE ステートメントを、必要なパラメータ宣言と共に作成します。図 35 に示したダイアログ ボックスには、2 番目のチェック ボックスとして [オプティミスティック同時実行制御] があることに注意してください。このボックスをオンにすると、ユーザーが GridView からレコードを更新、または削除する場合、変更する行のデータが、GridView にロードされた後に変わっていないことを確認するチェックが行われます。レコードが変わっている場合、更新、または削除は、行が一致しないために失敗します。失敗した場合に、どのような処理を行うかは、ページ開発者が設定できます。[オプティミスティック同時実行制御] をオフにしている場合、更新、または削除される行は、その主キー値のみで一致するか判断されます。主キー以外のフィールドの値は無視します。

つまり、ユーザーの更新、または削除が 、他のユーザーによる変更が行われた場合には実行されないようにするには、この 2 番目のチェック ボックスをオンにします。また、最後の更新、または削除を必ず有効にする場合は、オフにします。このチェック ボックスをオン、またはオフにすると、単純に、SqlDataSourceConflictDetection プロパティに、CompareAllValues、または OverwriteChanges がそれぞれ設定されます。次のセクションで説明しますが、ObjectDataSource にも、オプティミスティック同時実行制御を使用するかどうかを指定する ConflictDetection プロパティがあります。

ノート DataSourceGridView での削除をサポートするように構成する場合は、SELECT クエリで、基本データの主キーを構成するフィールドを、GridView に表示しない場合でも、戻す必要があります。以下に示すように、Order Details テーブルからレコードを取得する SqlDataSourceSelectCommand は、複合主キー フィールドである OrderID、および ProductID を戻します。さらに、GridViewDataKeyNames プロパティには、主キー フィールド (1 つ、または複数) を設定する必要があります。(主キー フィールドが複数ある場合は、それぞれをカンマで区切ります。)

最初のチェック ボックスは、その名前からわかるように、オンにすると、DELETE ステートメントだけでなく、INSERT、および UPDATE ステートメントも生成されます。このチェック ボックスをオンにした後の SqlDataSource の宣言構文は次のように拡張されます。


                  
<asp:SqlDataSource 
  ConnectionString="<%$ ConnectionStrings:NWConnectionString %>"
    DeleteCommand="DELETE FROM [Order Details] WHERE [OrderID] = 
      @original_OrderID AND [ProductID] = @original_ProductID"
    ID="SqlDataSource1" InsertCommand="INSERT INTO [Order Details] 
     ([OrderID], [ProductID], [UnitPrice], [Quantity]) VALUES (@OrderID, 
      @ProductID, @UnitPrice, @Quantity)"
    runat="server" SelectCommand="SELECT [OrderID], [ProductID], 
      [UnitPrice], [Quantity] FROM [Order Details] WHERE ([ProductID] = 
      @ProductID)"
    UpdateCommand="UPDATE [Order Details] SET [UnitPrice] = @UnitPrice, 
      [Quantity] = @Quantity WHERE [OrderID] = @original_OrderID AND 
      [ProductID] = @original_ProductID">
    <DeleteParameters>
        <asp:Parameter Name="original_OrderID" Type="Int32" />
        <asp:Parameter Name="original_ProductID" Type="Int32" />
    </DeleteParameters>
    <UpdateParameters>
        <asp:Parameter Name="UnitPrice" Type="Decimal" />
        <asp:Parameter Name="Quantity" Type="Int16" />
        <asp:Parameter Name="original_OrderID" Type="Int32" />
        <asp:Parameter Name="original_ProductID" Type="Int32" />
    </UpdateParameters>
    <SelectParameters>
        <asp:ControlParameter ControlID="productSelector" 
           Name="ProductID" PropertyName="SelectedValue"
            Type="Int32" />
    </SelectParameters>
    <InsertParameters>
        <asp:Parameter Name="OrderID" Type="Int32" />
        <asp:Parameter Name="ProductID" Type="Int32" />
        <asp:Parameter Name="UnitPrice" Type="Decimal" />
        <asp:Parameter Name="Quantity" Type="Int16" />
    </InsertParameters>
</asp:SqlDataSource>

                

<DeleteParameters>、<UpdateParameters>、<InsertParameters>、および DeleteCommand、InsertCommand、および UpdateCommand のプロパティが追加されていることに注意してください。このサンプルでは削除のみを行うので、InsertCommand、UpdateCommand、<UpdateParameters>、および <InsertParameters> は安全のために除去することもできます。

SqlDataSourceDeleteCommand を持つように構成すると、GridView のスマート タグに [削除を有効にする] チェック ボックスが表示されるようになります。これをオンにすると、CommandField と削除ボタンが GridView に追加されます (図 36 を参照)。

拡大図を表示するにはここをクリックしてください。

図 36 (図をクリックすると拡大図が表示されます)


以上で完了です。コードは必要ありません。ここでの欠点の 1 つは、GridView から削除を行う際に確認がないことです。つまり、特定の GridView 行の削除ボタンをクリックすると、即座に、ページがポストバックされ、その行は削除されます。エンド ユーザーに、削除を確認するプロンプトを表示するのが理想的です。後半の「削除を確認するクライアント サイド スクリプトの使用」セクションで、これを実現する方法を説明します。

以下に、ASP.NET ページの宣言構文を示します。このマークアップを確認する際は、以下の点に注意してください。


  • orderDetailsGridView GridViewDataKeyNames フィールドは、Order Details テーブルの主キー (OrderID および ProductID) に設定します。GridView の削除ボタンをクリックすると、ページがポストバックされ、SqlDataSourceDeleteCommand が実行されます。このときに、クリックした GridView 行の DataKeyNames 値が、DELETE ステートメントのパラメータ値 OrderID および ProductID に使用されます。


                  
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <h2>You Can Delete Order Detail Information for Orders 
        that Have Included Shipments
        of the Selected Product
        </h2>
        <asp:SqlDataSource ID="productListingDataSource" 
          ConnectionString="<%$ ConnectionStrings:NWConnectionString %>"
            SelectCommand="SELECT [ProductID], [ProductName] FROM 
              [Products]" Runat="server">
        </asp:SqlDataSource>
        <asp:DropDownList ID="productSelector" Runat="server" 
          DataSourceID="productListingDataSource"
            DataTextField="ProductName" DataValueField="ProductID" 
            AutoPostBack="True">
        </asp:DropDownList> 
        <asp:SqlDataSource ID="orderDetailsForProduct" 
         DataSourceMode="DataReader" 
         ConnectionString="<%$ ConnectionStrings:NWConnectionString %>"
         SelectCommand="SELECT [OrderID], [ProductID], [UnitPrice], 
         [Quantity] FROM [Order Details] WHERE ([ProductID] = 
         @ProductID2)"
            Runat="server" DeleteCommand="DELETE FROM [Order Details] 
            WHERE [OrderID] = @original_OrderID AND [ProductID] = 
            @original_ProductID">
            <DeleteParameters>
                <asp:Parameter Type="Int32" 
                  Name="OrderID"></asp:Parameter>
                <asp:Parameter Type="Int32" 
                  Name="ProductID"></asp:Parameter>
            </DeleteParameters>
            <SelectParameters>
                <asp:ControlParameter Name="ProductID2" 
                 Type="Int32" ControlID="productSelector"
                    PropertyName="SelectedValue"></asp:ControlParameter>
            </SelectParameters>
        </asp:SqlDataSource>
        
        <asp:GridView ID="orderDetailsGridView" Runat="server" 
          AutoGenerateColumns="False" 
          DataSourceID="orderDetailsForProduct" 
          DataKeyNames="OrderID,ProductID" BorderColor="Tan" 
          CellPadding="2" BackColor="LightGoldenrodYellow" 
          BorderWidth="1px" ForeColor="Black" GridLines="None" 
          OnRowDeleting="orderDetailsGridView_RowDeleting">
            <FooterStyle BackColor="Tan"></FooterStyle>
            <PagerStyle ForeColor="DarkSlateBlue" 
              HorizontalAlign="Center" 
              BackColor="PaleGoldenrod"></PagerStyle>
            <HeaderStyle Font-Bold="True" BackColor="Tan"></HeaderStyle>
            <AlternatingRowStyle 
              BackColor="PaleGoldenrod"></AlternatingRowStyle>
            <Columns>
                <asp:CommandField DeleteText="Delete Order Line Item" 
                 ShowDeleteButton="True"></asp:CommandField>
                <asp:BoundField HeaderText="Order ID" DataField="OrderID" 
                 SortExpression="OrderID">
                    <ItemStyle HorizontalAlign="Center"></ItemStyle>
                </asp:BoundField>
                <asp:BoundField HeaderText="Quantity" DataField="Quantity" 
                   SortExpression="Quantity" DataFormatString="{0:d}">
                    <ItemStyle HorizontalAlign="Right"></ItemStyle>
                </asp:BoundField>
                <asp:BoundField HeaderText="Unit Price" 
                   DataField="UnitPrice" SortExpression="UnitPrice" 
                   DataFormatString="{0:c}">
                    <ItemStyle HorizontalAlign="Right"></ItemStyle>
                </asp:BoundField>
            </Columns>
            <SelectedRowStyle ForeColor="GhostWhite" 
                 BackColor="DarkSlateBlue"></SelectedRowStyle>
        </asp:GridView> </div>
    </form>
</body>
</html>

                

削除を支援するために、GridView には、RowDeleting イベントがあります。このイベントは、基本データが実際に削除される前に発生します。一定の条件を満たす場合にのみ削除を許可するには、このイベントのイベント ハンドラを作成します。イベント ハンドラには、第 2 パラメータとして、GridViewDeleteEventArgs 型のオブジェクトが渡されます。このオブジェクトには、次に示すような有用なプロパティがいくつかあります。


  • Values は、削除する行の値のデータを提供します。
  • Cancel は、True に設定すると、削除を回避します。

また、基本レコードが正常に削除された後に発生する RowDeleted イベントも存在します。

ObjectDataSource データの削除

ObjectDataSource に連結された GridView でのレコードの削除は、基本的には、SqlDataSource に連結された GridView でのレコードの削除と同じです。唯一の相違は、バックエンドにあります。つまり、ObjectDataSource がアクセスするデータ アクセス層クラスで、レコードを削除するメソッドを提供します。

ObjectDataSource によって提供されるデータを操作する際には、このデータを処理するメソッドが 2 種類あります。ObjectDataSource には、次の 2 つの値のいずれかとなる ConflictDetection プロパティがあります。


  • OverwriteChanges (既定値)
  • CompareAllValues

OverwriteChanges オプションは、現在のユーザーが削除、または更新するデータを、他のユーザーも変更している可能性を考慮しない場合に使用します。このシナリオでは、最後にコミットした削除、または更新が必ず有効になります。一方、他のユーザーが基本データを変更していた場合は、ユーザーの変更を回避したい場合もあります。このような場合には、CompareAllValues オプションを使用します。

ObjectDataSourceConflictDetection プロパティについてここで説明したのは、Delete メソッドのシグネチャは、この設定に依存するためです。Delete メソッドは、削除するレコードを一意に識別するために必要な個数のパラメータを受け取らなければなりません。たとえば、Products テーブルから商品を削除するメソッドを作成するには、少なくとも、ProductID integer 入力を受け取る必要があります。これは、各商品が ProductID によって一意に識別されるためです。OverwriteChanges モードを使用する場合、Delete メソッドが受け取る必要があるのは、この最少の入力セットのみです。一方、CompareAllValues オプションを使用する場合、Delete メソッドのシグネチャは、主キー フィールド以外の GridView で定義さたフィールドも受け取る必要があります。

これは、今の時点では少し複雑に見えるかもしれませんが、それも当然です。具体的なサンプルを確認していくうちに、理解できるようになります。Order Details テーブルには、複合主キーがあり、それは、ProductID および OrderID の 2 つのフィールドで構成されます。GridView は、OrderID、Quantity、 および UnitPrice の 3 つのフィールドを表示しています。ObjectDataSourceConflictDetection プロパティに OverwriteChanges を設定して削除を実行する場合、Delete メソッドは、次のようになります。


                  
' Visual Basic .NET
Public Shared Sub DeleteMethod(ByVal original_OrderID As Integer, _
  ByVal original_ProductID As Integer)
    ...
End Sub
// C#
public static void DeleteMethod(int original_OrderID, int original_ProductID)
{
    ...
}

                

一方、ConflictDetection プロパティに OverwriteChanges を設定する場合、Delete メソッドは次のようになります。


                  
' Visual Basic .NET
Public Shared Sub DeleteMethod(ByVal original_OrderID As Integer, _
  ByVal original_ProductID As Integer, _
  ByVal original_Quantity as Integer, _
  ByVal original_UnitPrice as Decimal)
    ...
End Sub
// C#
public static void DeleteMethod(int original_OrderID, 
  int original_ProductID, int original_Quantity, 
  decimal original_UnitPrice)
{
    ...
}

                

このサンプルでは、OverwriteChanges を使用します。以下は、OrderDetailDAL クラスの Delete メソッドです。

DeleteOrderDetail メソッド (Visual Basic)


                  
Public Class OrderDetailDAL
    ...
    Public Shared Sub DeleteOrderDetail(ByVal original_OrderID _
      As Integer, 
      ByVal original_ProductID As Integer)
        ' Northwind の Products テーブルから
        ' 指定された注文詳細レコードを削除します。
        Dim sql As String = _
          "DELETE FROM [Order Details] WHERE OrderID = " & _
          "@OrderID AND ProductID = @ProductID"
        Using myConnection As New _
SqlConnection(ConfigurationManager.ConnectionStrings("NWConnectionString")
.ConnectionString)
            Dim myCommand As New SqlCommand(sql, myConnection)
            myCommand.Parameters.Add(New SqlParameter("@OrderID", _
              original_OrderID))
            myCommand.Parameters.Add(New SqlParameter("@ProductID", _
              original_ProductID))
            myConnection.Open()
            myCommand.ExecuteNonQuery()
            myConnection.Close()
        End Using
    End Sub
End Class
DeleteOrderDetail メソッド (C#)
public class OrderDetailDAL
{
    ...
    
    public static void DeleteOrderDetail(int original_OrderID, 
      int original_ProductID)
    {
        // Northwind の Products テーブルから
        // 指定された注文詳細レコードを削除します。
        string sql = "DELETE FROM [Order Details] WHERE OrderID = " +
          "@OrderID AND ProductID = @ProductID";
        using (SqlConnection myConnection = 
        new SqlConnection( 
ConfigurationManager.ConnectionStrings["NWConnectionString"].ConnectionString))
        {
            SqlCommand myCommand = new SqlCommand(sql, myConnection);
            myCommand.Parameters.Add(new SqlParameter("@OrderID", 
              original_OrderID));
            myCommand.Parameters.Add(new SqlParameter("@ProductID", 
              original_ProductID));
            myConnection.Open();
            myCommand.ExecuteNonQuery();
            myConnection.Close();
        }
    }
}

                

ObjectDataSource の削除の構成は、SqlDataSource の場合と少し異なります。使用するクラスを選択後、[DELETE] タブで、データを削除するメソッドを指定できます。図 37 に示すように、ドロップ ダウン リストでメソッド名を選択します。

ms972940.gridview_fg37(ja-jp,MSDN.10).gif

図 37


ObjectDataSource の削除を構成した後の、GridView での削除の構成のステップは、SqlDataSource の場合と同じです。結果も同じです。以下に、ASP.NET ページの宣言構文を示します。


                  
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" 
  "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<script runat="server">
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
       <div>
        <h2>You Can Delete Order Detail Information 
            for Orders that Have Included Shipments
        of the Selected Product
        </h2>
        <asp:ObjectDataSource ID="productListingDataSource" 
             Runat="server" TypeName="ProductDAL"
            SelectMethod="GetProducts">
        </asp:ObjectDataSource>
        <asp:DropDownList ID="productSelector" Runat="server" 
            DataSourceID="productListingDataSource"
            DataTextField="ProductName" DataValueField="ProductID" 
            AutoPostBack="True">
        </asp:DropDownList>  
           <asp:ObjectDataSource ID="orderDetailsForProduct" 
              Runat="server" SelectMethod="GetOrderDetailsByProductID" 
              TypeName="OrderDetailDAL" DeleteMethod="DeleteOrderDetail">
               <DeleteParameters>
                   <asp:Parameter Type="Int32" 
                     Name="original_OrderID"></asp:Parameter>
                   <asp:Parameter Type="Int32" 
                     Name="original_ProductID"></asp:Parameter>
               </DeleteParameters>
               <SelectParameters>
                   <asp:ControlParameter Name="productID" 
                     Type="Int32" ControlID="productSelector" 
                     PropertyName="SelectedValue"></asp:ControlParameter>
               </SelectParameters>
           </asp:ObjectDataSource>
        
        <asp:GridView ID="orderDetailsGridView" Runat="server" 
           AutoGenerateColumns="False" 
           DataSourceID="orderDetailsForProduct" 
           DataKeyNames="OrderID,ProductID" BorderColor="Tan" 
           CellPadding="2" BackColor="LightGoldenrodYellow" 
           BorderWidth="1px" ForeColor="Black" GridLines="None">
            <FooterStyle BackColor="Tan"></FooterStyle>
            <PagerStyle ForeColor="DarkSlateBlue" HorizontalAlign="Center" 
              BackColor="PaleGoldenrod"></PagerStyle>
            <HeaderStyle Font-Bold="True" BackColor="Tan"></HeaderStyle>
            <AlternatingRowStyle 
               BackColor="PaleGoldenrod"></AlternatingRowStyle>
            <Columns>
                <asp:CommandField DeleteText="Delete Order Line Item" 
                  ShowDeleteButton="True"></asp:CommandField>
                <asp:BoundField HeaderText="Order ID" DataField="OrderID" 
                  SortExpression="OrderID">
                    <ItemStyle HorizontalAlign="Center"></ItemStyle>
                </asp:BoundField>
                <asp:BoundField HeaderText="Quantity" 
                   DataField="Quantity" SortExpression="Quantity" 
                   DataFormatString="{0:d}">
                    <ItemStyle HorizontalAlign="Right"></ItemStyle>
                </asp:BoundField>
                <asp:BoundField HeaderText="Unit Price" 
                    DataField="UnitPrice" SortExpression="UnitPrice" 
                    DataFormatString="{0:c}">
                    <ItemStyle HorizontalAlign="Right"></ItemStyle>
                </asp:BoundField>
            </Columns>
            <SelectedRowStyle ForeColor="GhostWhite" 
               BackColor="DarkSlateBlue"></SelectedRowStyle>
        </asp:GridView> </div>
    </div>
    </form>
</body>
</html>
                

削除を確認するクライアント サイド スクリプトの使用

ここで説明してきた 2 つのサンプルには、削除を確認する機能がありません。つまり、ユーザーが削除ボタンをクリックすると、即座に、ポストバックが発生し、レコードが削除されます。誤った削除を避けるために、レコードを削除する前に、本当に削除するかどうかをエンド ユーザーに確認するのが安全な方法です。よく使用される確認技術の 1 つが、クライアント サイドの確認メッセージボックスです。確認メッセージボックスには、OK ボタンおよびキャンセル ボタンが表示され、ユーザーがキャンセルをクリックすると、フォームの実行が行われません。

ASP.NET 2.0 の Button、LinkButton、および ImageButton の Web コントロールには、OnClientClick プロパティがあります。このプロパティでは、Button がクリックされたときに実行する クライアント サイド JavaScript を指定できます。次のような JavaScript を使用します。


                  
return confirm(msg);

                

これで、ボタンをクリックしたときに、ユーザーに確認メッセージボックスが表示されます (ここで、msg は、確認メッセージボックスに表示する文字列です)。ユーザーがメッセージボックスのキャンセル ボタンをクリックした場合は、フォームはポストバックされません。OK ボタンをクリックした場合は、フォームが実行されます。

しかし、GridView の CommandField には、OnClientClick プロパティがありません。ただし、GridView では、Button の CommandName が Delete であれば、そのボタンがクリックされたときに、GridView は、関連付けられているレコードを削除します。このため、独自の削除ボタンを作成します。これには、CommandName を Delete にした Button (または LinkButton、またはImageButton) を含む TemplateField を追加します。この Button が追加できれば、OnClientClick プロパティを適切な値に設定することが可能になります。以下に、削除ボタンがクリックされたときに確認メッセージボックスを提供するための GridView の修正方法を示します。


                  
<asp:GridView ID="orderDetailsGridView" Runat="server" 
  DataSourceID="orderDetailsForProduct"
    AutoGenerateColumns="False" DataKeyNames="OrderID,ProductID" 
    BorderColor="Tan"
    CellPadding="2" BackColor="LightGoldenrodYellow" BorderWidth="1px" 
    ForeColor="Black"
    GridLines="None">
    <FooterStyle BackColor="Tan"></FooterStyle>
    <PagerStyle ForeColor="DarkSlateBlue" HorizontalAlign="Center" 
     BackColor="PaleGoldenrod"></PagerStyle>
    <HeaderStyle Font-Bold="True" BackColor="Tan"></HeaderStyle>
    <AlternatingRowStyle BackColor="PaleGoldenrod"></AlternatingRowStyle>
    <Columns>
        <asp:TemplateField><ItemTemplate>
            <asp:LinkButton ID="LinkButton1" Runat="server" 
OnClientClick="return confirm('Are you sure you 
want to delete this record?');"
                CommandName="Delete">Delete Order Line Item</asp:LinkButton>
        </ItemTemplate>
        </asp:TemplateField>
        <asp:BoundField HeaderText="Order ID" DataField="OrderID" 
           SortExpression="OrderID">
            <ItemStyle HorizontalAlign="Center"></ItemStyle>
        </asp:BoundField>
        <asp:BoundField HeaderText="Quantity" DataField="Quantity" 
           SortExpression="Quantity"
            DataFormatString="{0:d}">
            <ItemStyle HorizontalAlign="Right"></ItemStyle>
        </asp:BoundField>
        <asp:BoundField HeaderText="Unit Price" 
           DataField="UnitPrice" SortExpression="UnitPrice"
            DataFormatString="{0:c}">
            <ItemStyle HorizontalAlign="Right"></ItemStyle>
        </asp:BoundField>
    </Columns>
    <SelectedRowStyle ForeColor="GhostWhite" 
       BackColor="DarkSlateBlue"></SelectedRowStyle>
</asp:GridView>

                

TemplateField には、LinkButton があり、その CommandName プロパティが Delete に設定されています。また、OnClientClick プロパティには、return confirm('Are you sure you want to delete this record?'); が設定されています。図 38 は、削除ボタンがクリックされたときに表示される確認メッセージボックスを示します。レコードは、メッセージボックスの OK ボタンをクリックした場合にのみ削除されます。

ms972940.gridview_fg38(ja-jp,MSDN.10).gif

図 38


次のセクション: GridView での基本データの編集


表示: