DataGridに削除機能を組み込む ~dg2.aspx

 

DataGridにレコードを削除する機能を追加するには、DataGridの右クリックから[プロパティビルダ]を選択します。「DataGrid1プロパティビルダ」が表示されたら、左側から[]をクリックします。「使用可能な列」から[ボタン列]を展開して[削除]を選択したら、[>]ボタンをクリックします。「選択された列」に[削除]ボタンが移動したら、ButtonColumnプロパティの「ボタンの種類」から[PushButton]を選択します。[OK]ボタンをクリックしてプロパティビルダを閉じます。

 

4: DataGridのプロパティビルダから[削除]ボタンを追加

 

 

5: DataGrid[削除]ボタンが追加された

 

デザイナの右クリックから[コードの表示]を選択します。コードウィンドウが表示されたら「クラス名」のドロップダウンリストから[DataGrid1]、「メソッド名」のドロップダウンリストから[DeleteCommand]を選択します。DeleteCommandイベントハンドラが作成されたら、次のコードを追加します。

 

Private Sub DataGrid1_DeleteCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) _

  Handles DataGrid1.DeleteCommand

  Dim intCustomerID As Integer = DataGrid1.DataKeys(e.Item.ItemIndex)

  DeleteRecord(intCustomerID)

  BindDataGrid()

End Sub

 

DeleteCommandイベントハンドラは、DataGridから[削除]ボタンをクリックしたときに実行されます。このイベントハンドラでは、DataGridDataKeysコレクションからカレントレコードの主キー(CustomerID)を取得してDeleteRecordメソッドを実行します。

 

DeleteRecordは、DataTableから目的のレコードを検索して削除したら、DataAdapterUpdateメソッドを実行してデータベースに反映します。Updateメソッドは、CommandBuilderが自動作成したSQLを使用してデータベースからレコードを削除します。データベースからレコードを削除するとき、他のユーザーからレコードがすでに変更されているときは(削除されているときも含む)、同時実行の例外エラーが発生します。ここでは、Try…Catch…Finallyステートメントで、例外エラーを拾ってエラーのメッセージを表示します。

 

同時実行の例外エラーが発生したときは、DataGridに最新のデータを表示するためにDataTableオブジェクトを無効にして再作成します。

 

CommandBuilderが生成したレコード削除用のSQLステートメント:

DELETE FROM  Customers

  WHERE ( (CustomerID = ?)

  AND ((? = 1 AND CompanyName IS NULL) OR (CompanyName = ?))

  AND ((? = 1 AND ContactName IS NULL) OR (ContactName = ?))

  AND ((? = 1 AND Phone IS NULL) OR (Phone = ?)) )

 

リスト2: DataTableからレコードを削除してデータベースに反映する

Private Function DeleteRecord(ByVal intCustomerID As Integer) As String

  Dim intRetValue As Integer = 0

  Dim dr As DataRow = mdt.Rows.Find(intCustomerID)

  If Not (dr Is Nothing) Then

    dr.Delete()

    Try

      mda.Update(mdt)

      intRetValue = 1

    Catch ex As DBConcurrencyException

      lblMessage.Text = "他のユーザーから変更されています! 再試行してください..."

      mdt = Nothing

    Catch ex As Exception

      lblMessage.Text = ex.Message.ToString

    Finally

      Session(conSessionKey) = mdt

    End Try

  End If

  Return intRetValue

End Function

 

6: DataGridから[削除]ボタンをクリックしたところ

 

 

 

Tip 削除ボタンをクリックしたときに確認メッセージを表示するには

DataGridから[削除]ボタンをクリックしたときに「削除してよろしいですか?」の確認メッセージを表示するには、ItemDataBoundイベントハンドラに次のコードを追加します。このコードを追加すると、[削除]ボタンにクライアント側で実行されるonclickイベントが追加されてJavaScriptが実行されます。JavaScriptで問い合わせのメッセージを表示するには、confirm関数を使用します。confirm関数の戻り値はreturnステートメントで返します。onclickイベントからtrueを返すと[削除]ボタンが受け付けられて、falseを返すとキャンセルされます。

 

 

[削除]ボタンのHTMLタグに追加されたonclickイベントとJavaScript

<input type="submit" ...

  value="削除"

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

 

DataGridItemDataBoundイベントハンドラ

Private Sub DataGrid1_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) _

  Handles DataGrid1.ItemDataBound

  If e.Item.ItemType = ListItemType.Item OrElse _

    e.Item.ItemType = ListItemType.AlternatingItem Then

    Dim btn As Button = CType(e.Item.Cells(5).Controls(0), Button)

    btn.Attributes.Add("onclick", "return confirm('削除してよろしいですか?')")

  End If

End Sub