Web アプリケーション (ASP.NET) でDBを更新してみよう(VS2003 DataAdapter 編)
Web アプリケーション (ASP.NET) でDBのデータを表示しよう(VS2003 DataAdapter 編) で表示した項目を編集できるようにしてみましょう。
※今回は、プロジェクト名を MyWebDBApp04 としました。
※解説に用いた Visual Studio 2003 Professional Edition です。
サンプルのダウンロード
■プロジェクトの作成 〜 データアダプタの作成
Web アプリケーション (ASP.NET) でDBのデータを表示しよう(VS2003 DataAdapter 編)にて行った事と全く同じ事をします。
プロジェクトの作成
データ接続の作成
データセット(型付データセット)の作成
データアダプタの作成
■Web Form に データセット と データグリッド を配置する
ツールボックス(表示されていない場合は、メニューバーの[表示]→[ツールボックス]をクリックして表示させてくださいね)の
[データ]タブの中にある、DataSet を クリックし、そのままの状態で、デザイナ上の Web Form をクリックします。

データセットの追加画面が表示されます。
ここでは、先に作成した Customers データセットを選択しました。

再びデザイナに戻ったら、ツールボックスから DataGrid を選択して Web Form に配置します。

DataGrid を選択して、プロパティ ウィンドウ(表示されていない場合は、メニューバーの[表示]→[プロパティ ウィンドウ]をクリックして表示させてくださいね)の
AutoGenerateColumns の値を False にします。
Web Page 上に配置されている DataGrid を右クリックして、プロパティ ビルダを起動します。
[全般]タブを選択して、データ ソースに 先に作成済みの DataSet の名前を入力し、
データ メンバに Customers を選択します。
データ キー フィールドに該当テーブル(この場合は Customers)の主キー項目を設定します。

[列]タブを選択して、[使用可能な列] から データフィールド → (すべてのフィールド) または 任意の列 を選択し、[>]ボタンを押下して [選択された列] に追加します。
選択された列の内、データ キー フィールド 以外の列を一つ一つをクリックし、プロパティ グリッド の下のほうにある [この列をテンプレート列に変換する] というリンクをクリックします。
データ キー フィールド を編集させたくない場合は、データ キー フィールド の列を選択し、読み取り専用にチェックを入れます。
同様に、ボタン列 → [編集、更新、キャンセル] と [削除] を [選択された列] に追加します。
[OK]ボタンを押下し、プロパティ グリッドを閉じます。

■コードを入力
ソリューション エクスプローラ(表示されていない場合は、メニューバーの[表示]→[ソリューション エクスプローラ]をクリックして表示させてくださいね)の
WebForm を 右クリックして、コードエディタを表示させて、以下のコードを入力します。
Public Class WebForm1 Inherits System.Web.UI.Page #Region " Web フォーム デザイナで生成されたコード " 'この呼び出しは Web フォーム デザイナで必要です。 <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent() Me.SqlDataAdapter1 = New System.Data.SqlClient.SqlDataAdapter Me.SqlDeleteCommand1 = New System.Data.SqlClient.SqlCommand Me.SqlConnection1 = New System.Data.SqlClient.SqlConnection Me.SqlInsertCommand1 = New System.Data.SqlClient.SqlCommand Me.SqlSelectCommand1 = New System.Data.SqlClient.SqlCommand Me.SqlUpdateCommand1 = New System.Data.SqlClient.SqlCommand Me.Customers1 = New MyWebDBApp04.Customers CType(Me.Customers1, System.ComponentModel.ISupportInitialize).BeginInit() ' 'SqlDataAdapter1 ' Me.SqlDataAdapter1.DeleteCommand = Me.SqlDeleteCommand1 Me.SqlDataAdapter1.InsertCommand = Me.SqlInsertCommand1 Me.SqlDataAdapter1.SelectCommand = Me.SqlSelectCommand1 Me.SqlDataAdapter1.TableMappings.AddRange(New System.Data.Common.DataTableMapping() { _ New System.Data.Common.DataTableMapping("Table", "Customers", _ New System.Data.Common.DataColumnMapping() { _ New System.Data.Common.DataColumnMapping("CustomerID", "CustomerID"), _ New System.Data.Common.DataColumnMapping("CompanyName", "CompanyName"), _ New System.Data.Common.DataColumnMapping("ContactName", "ContactName"), _ New System.Data.Common.DataColumnMapping("ContactTitle", "ContactTitle"), _ New System.Data.Common.DataColumnMapping("Address", "Address"), _ New System.Data.Common.DataColumnMapping("City", "City"), _ New System.Data.Common.DataColumnMapping("Region", "Region"), _ New System.Data.Common.DataColumnMapping("PostalCode", "PostalCode"), _ New System.Data.Common.DataColumnMapping("Country", "Country"), _ New System.Data.Common.DataColumnMapping("Phone", "Phone"), _ New System.Data.Common.DataColumnMapping("Fax", "Fax")})}) Me.SqlDataAdapter1.UpdateCommand = Me.SqlUpdateCommand1 ' 'SqlDeleteCommand1 ' Me.SqlDeleteCommand1.CommandText = "DELETE FROM Customers WHERE (CustomerID = @Original_CustomerID) AND (Address = @O" & _ "riginal_Address OR @Original_Address IS NULL AND Address IS NULL) AND (City = @O" & _ "riginal_City OR @Original_City IS NULL AND City IS NULL) AND (CompanyName = @Ori" & _ "ginal_CompanyName) AND (ContactName = @Original_ContactName OR @Original_Contact" & _ "Name IS NULL AND ContactName IS NULL) AND (ContactTitle = @Original_ContactTitle" & _ " OR @Original_ContactTitle IS NULL AND ContactTitle IS NULL) AND (Country = @Ori" & _ "ginal_Country OR @Original_Country IS NULL AND Country IS NULL) AND (Fax = @Orig" & _ "inal_Fax OR @Original_Fax IS NULL AND Fax IS NULL) AND (Phone = @Original_Phone " & _ "OR @Original_Phone IS NULL AND Phone IS NULL) AND (PostalCode = @Original_Postal" & _ "Code OR @Original_PostalCode IS NULL AND PostalCode IS NULL) AND (Region = @Orig" & _ "inal_Region OR @Original_Region IS NULL AND Region IS NULL)" Me.SqlDeleteCommand1.Connection = Me.SqlConnection1 Me.SqlDeleteCommand1.Parameters.Add(New System.Data.SqlClient.SqlParameter("@Original_CustomerID", System.Data.SqlDbType.NVarChar, 5, _ System.Data.ParameterDirection.Input, False, CType(0, Byte), CType(0, Byte), "CustomerID", System.Data.DataRowVersion.Original, Nothing)) Me.SqlDeleteCommand1.Parameters.Add(New System.Data.SqlClient.SqlParameter("@Original_Address", System.Data.SqlDbType.NVarChar, 60, _ System.Data.ParameterDirection.Input, False, CType(0, Byte), CType(0, Byte), "Address", System.Data.DataRowVersion.Original, Nothing)) Me.SqlDeleteCommand1.Parameters.Add(New System.Data.SqlClient.SqlParameter("@Original_City", System.Data.SqlDbType.NVarChar, 15, _ System.Data.ParameterDirection.Input, False, CType(0, Byte), CType(0, Byte), "City", System.Data.DataRowVersion.Original, Nothing)) Me.SqlDeleteCommand1.Parameters.Add(New System.Data.SqlClient.SqlParameter("@Original_CompanyName", System.Data.SqlDbType.NVarChar, 40, _ System.Data.ParameterDirection.Input, False, CType(0, Byte), CType(0, Byte), "CompanyName", System.Data.DataRowVersion.Original, Nothing)) Me.SqlDeleteCommand1.Parameters.Add(New System.Data.SqlClient.SqlParameter("@Original_ContactName", System.Data.SqlDbType.NVarChar, 30, _ System.Data.ParameterDirection.Input, False, CType(0, Byte), CType(0, Byte), "ContactName", System.Data.DataRowVersion.Original, Nothing)) Me.SqlDeleteCommand1.Parameters.Add(New System.Data.SqlClient.SqlParameter("@Original_ContactTitle", System.Data.SqlDbType.NVarChar, 30, _ System.Data.ParameterDirection.Input, False, CType(0, Byte), CType(0, Byte), "ContactTitle", System.Data.DataRowVersion.Original, Nothing)) Me.SqlDeleteCommand1.Parameters.Add(New System.Data.SqlClient.SqlParameter("@Original_Country", System.Data.SqlDbType.NVarChar, 15, _ System.Data.ParameterDirection.Input, False, CType(0, Byte), CType(0, Byte), "Country", System.Data.DataRowVersion.Original, Nothing)) Me.SqlDeleteCommand1.Parameters.Add(New System.Data.SqlClient.SqlParameter("@Original_Fax", System.Data.SqlDbType.NVarChar, 24, _ System.Data.ParameterDirection.Input, False, CType(0, Byte), CType(0, Byte), "Fax", System.Data.DataRowVersion.Original, Nothing)) Me.SqlDeleteCommand1.Parameters.Add(New System.Data.SqlClient.SqlParameter("@Original_Phone", System.Data.SqlDbType.NVarChar, 24, _ System.Data.ParameterDirection.Input, False, CType(0, Byte), CType(0, Byte), "Phone", System.Data.DataRowVersion.Original, Nothing)) Me.SqlDeleteCommand1.Parameters.Add(New System.Data.SqlClient.SqlParameter("@Original_PostalCode", System.Data.SqlDbType.NVarChar, 10, _ System.Data.ParameterDirection.Input, False, CType(0, Byte), CType(0, Byte), "PostalCode", System.Data.DataRowVersion.Original, Nothing)) Me.SqlDeleteCommand1.Parameters.Add(New System.Data.SqlClient.SqlParameter("@Original_Region", System.Data.SqlDbType.NVarChar, 15, _ System.Data.ParameterDirection.Input, False, CType(0, Byte), CType(0, Byte), "Region", System.Data.DataRowVersion.Original, Nothing)) ' 'SqlConnection1 ' Me.SqlConnection1.ConnectionString = "workstation id=DELLPC;packet size=4096;integrated security=SSPI;data source=""(loc" & _ "al)"";persist security info=False;initial catalog=Northwind" ' 'SqlInsertCommand1 ' Me.SqlInsertCommand1.CommandText = "INSERT INTO Customers(CustomerID, CompanyName, ContactName, ContactTitle, Address" & _ ", City, Region, PostalCode, Country, Phone, Fax) VALUES (@CustomerID, @CompanyNa" & _ "me, @ContactName, @ContactTitle, @Address, @City, @Region, @PostalCode, @Country" & _ ", @Phone, @Fax); SELECT CustomerID, CompanyName, ContactName, ContactTitle, Addr" & _ "ess, City, Region, PostalCode, Country, Phone, Fax FROM Customers WHERE (Custome" & _ "rID = @CustomerID)" Me.SqlInsertCommand1.Connection = Me.SqlConnection1 Me.SqlInsertCommand1.Parameters.Add(New System.Data.SqlClient.SqlParameter("@CustomerID", System.Data.SqlDbType.NVarChar, 5, "CustomerID")) Me.SqlInsertCommand1.Parameters.Add(New System.Data.SqlClient.SqlParameter("@CompanyName", System.Data.SqlDbType.NVarChar, 40, "CompanyName")) Me.SqlInsertCommand1.Parameters.Add(New System.Data.SqlClient.SqlParameter("@ContactName", System.Data.SqlDbType.NVarChar, 30, "ContactName")) Me.SqlInsertCommand1.Parameters.Add(New System.Data.SqlClient.SqlParameter("@ContactTitle", System.Data.SqlDbType.NVarChar, 30, "ContactTitle")) Me.SqlInsertCommand1.Parameters.Add(New System.Data.SqlClient.SqlParameter("@Address", System.Data.SqlDbType.NVarChar, 60, "Address")) Me.SqlInsertCommand1.Parameters.Add(New System.Data.SqlClient.SqlParameter("@City", System.Data.SqlDbType.NVarChar, 15, "City")) Me.SqlInsertCommand1.Parameters.Add(New System.Data.SqlClient.SqlParameter("@Region", System.Data.SqlDbType.NVarChar, 15, "Region")) Me.SqlInsertCommand1.Parameters.Add(New System.Data.SqlClient.SqlParameter("@PostalCode", System.Data.SqlDbType.NVarChar, 10, "PostalCode")) Me.SqlInsertCommand1.Parameters.Add(New System.Data.SqlClient.SqlParameter("@Country", System.Data.SqlDbType.NVarChar, 15, "Country")) Me.SqlInsertCommand1.Parameters.Add(New System.Data.SqlClient.SqlParameter("@Phone", System.Data.SqlDbType.NVarChar, 24, "Phone")) Me.SqlInsertCommand1.Parameters.Add(New System.Data.SqlClient.SqlParameter("@Fax", System.Data.SqlDbType.NVarChar, 24, "Fax")) ' 'SqlSelectCommand1 ' Me.SqlSelectCommand1.CommandText = "SELECT CustomerID, CompanyName, ContactName, ContactTitle, Address, City, Region," & _ " PostalCode, Country, Phone, Fax FROM Customers" Me.SqlSelectCommand1.Connection = Me.SqlConnection1 ' 'SqlUpdateCommand1 ' Me.SqlUpdateCommand1.CommandText = "UPDATE Customers SET CustomerID = @CustomerID, CompanyName = @CompanyName, Contac" & _ "tName = @ContactName, ContactTitle = @ContactTitle, Address = @Address, City = @" & _ "City, Region = @Region, PostalCode = @PostalCode, Country = @Country, Phone = @P" & _ "hone, Fax = @Fax WHERE (CustomerID = @Original_CustomerID) AND (Address = @Origi" & _ "nal_Address OR @Original_Address IS NULL AND Address IS NULL) AND (City = @Origi" & _ "nal_City OR @Original_City IS NULL AND City IS NULL) AND (CompanyName = @Origina" & _ "l_CompanyName) AND (ContactName = @Original_ContactName OR @Original_ContactName" & _ " IS NULL AND ContactName IS NULL) AND (ContactTitle = @Original_ContactTitle OR " & _ "@Original_ContactTitle IS NULL AND ContactTitle IS NULL) AND (Country = @Origina" & _ "l_Country OR @Original_Country IS NULL AND Country IS NULL) AND (Fax = @Original" & _ "_Fax OR @Original_Fax IS NULL AND Fax IS NULL) AND (Phone = @Original_Phone OR @" & _ "Original_Phone IS NULL AND Phone IS NULL) AND (PostalCode = @Original_PostalCode" & _ " OR @Original_PostalCode IS NULL AND PostalCode IS NULL) AND (Region = @Original" & _ "_Region OR @Original_Region IS NULL AND Region IS NULL); SELECT CustomerID, Comp" & _ "anyName, ContactName, ContactTitle, Address, City, Region, PostalCode, Country, " & _ "Phone, Fax FROM Customers WHERE (CustomerID = @CustomerID)" Me.SqlUpdateCommand1.Connection = Me.SqlConnection1 Me.SqlUpdateCommand1.Parameters.Add(New System.Data.SqlClient.SqlParameter("@CustomerID", System.Data.SqlDbType.NVarChar, 5, "CustomerID")) Me.SqlUpdateCommand1.Parameters.Add(New System.Data.SqlClient.SqlParameter("@CompanyName", System.Data.SqlDbType.NVarChar, 40, "CompanyName")) Me.SqlUpdateCommand1.Parameters.Add(New System.Data.SqlClient.SqlParameter("@ContactName", System.Data.SqlDbType.NVarChar, 30, "ContactName")) Me.SqlUpdateCommand1.Parameters.Add(New System.Data.SqlClient.SqlParameter("@ContactTitle", System.Data.SqlDbType.NVarChar, 30, "ContactTitle")) Me.SqlUpdateCommand1.Parameters.Add(New System.Data.SqlClient.SqlParameter("@Address", System.Data.SqlDbType.NVarChar, 60, "Address")) Me.SqlUpdateCommand1.Parameters.Add(New System.Data.SqlClient.SqlParameter("@City", System.Data.SqlDbType.NVarChar, 15, "City")) Me.SqlUpdateCommand1.Parameters.Add(New System.Data.SqlClient.SqlParameter("@Region", System.Data.SqlDbType.NVarChar, 15, "Region")) Me.SqlUpdateCommand1.Parameters.Add(New System.Data.SqlClient.SqlParameter("@PostalCode", System.Data.SqlDbType.NVarChar, 10, "PostalCode")) Me.SqlUpdateCommand1.Parameters.Add(New System.Data.SqlClient.SqlParameter("@Country", System.Data.SqlDbType.NVarChar, 15, "Country")) Me.SqlUpdateCommand1.Parameters.Add(New System.Data.SqlClient.SqlParameter("@Phone", System.Data.SqlDbType.NVarChar, 24, "Phone")) Me.SqlUpdateCommand1.Parameters.Add(New System.Data.SqlClient.SqlParameter("@Fax", System.Data.SqlDbType.NVarChar, 24, "Fax")) Me.SqlUpdateCommand1.Parameters.Add(New System.Data.SqlClient.SqlParameter("@Original_CustomerID", System.Data.SqlDbType.NVarChar, 5, _ System.Data.ParameterDirection.Input, False, CType(0, Byte), CType(0, Byte), "CustomerID", System.Data.DataRowVersion.Original, Nothing)) Me.SqlUpdateCommand1.Parameters.Add(New System.Data.SqlClient.SqlParameter("@Original_Address", System.Data.SqlDbType.NVarChar, 60, _ System.Data.ParameterDirection.Input, False, CType(0, Byte), CType(0, Byte), "Address", System.Data.DataRowVersion.Original, Nothing)) Me.SqlUpdateCommand1.Parameters.Add(New System.Data.SqlClient.SqlParameter("@Original_City", System.Data.SqlDbType.NVarChar, 15, _ System.Data.ParameterDirection.Input, False, CType(0, Byte), CType(0, Byte), "City", System.Data.DataRowVersion.Original, Nothing)) Me.SqlUpdateCommand1.Parameters.Add(New System.Data.SqlClient.SqlParameter("@Original_CompanyName", System.Data.SqlDbType.NVarChar, 40, _ System.Data.ParameterDirection.Input, False, CType(0, Byte), CType(0, Byte), "CompanyName", System.Data.DataRowVersion.Original, Nothing)) Me.SqlUpdateCommand1.Parameters.Add(New System.Data.SqlClient.SqlParameter("@Original_ContactName", System.Data.SqlDbType.NVarChar, 30, _ System.Data.ParameterDirection.Input, False, CType(0, Byte), CType(0, Byte), "ContactName", System.Data.DataRowVersion.Original, Nothing)) Me.SqlUpdateCommand1.Parameters.Add(New System.Data.SqlClient.SqlParameter("@Original_ContactTitle", System.Data.SqlDbType.NVarChar, 30, _ System.Data.ParameterDirection.Input, False, CType(0, Byte), CType(0, Byte), "ContactTitle", System.Data.DataRowVersion.Original, Nothing)) Me.SqlUpdateCommand1.Parameters.Add(New System.Data.SqlClient.SqlParameter("@Original_Country", System.Data.SqlDbType.NVarChar, 15, _ System.Data.ParameterDirection.Input, False, CType(0, Byte), CType(0, Byte), "Country", System.Data.DataRowVersion.Original, Nothing)) Me.SqlUpdateCommand1.Parameters.Add(New System.Data.SqlClient.SqlParameter("@Original_Fax", System.Data.SqlDbType.NVarChar, 24, _ System.Data.ParameterDirection.Input, False, CType(0, Byte), CType(0, Byte), "Fax", System.Data.DataRowVersion.Original, Nothing)) Me.SqlUpdateCommand1.Parameters.Add(New System.Data.SqlClient.SqlParameter("@Original_Phone", System.Data.SqlDbType.NVarChar, 24, _ System.Data.ParameterDirection.Input, False, CType(0, Byte), CType(0, Byte), "Phone", System.Data.DataRowVersion.Original, Nothing)) Me.SqlUpdateCommand1.Parameters.Add(New System.Data.SqlClient.SqlParameter("@Original_PostalCode", System.Data.SqlDbType.NVarChar, 10, _ System.Data.ParameterDirection.Input, False, CType(0, Byte), CType(0, Byte), "PostalCode", System.Data.DataRowVersion.Original, Nothing)) Me.SqlUpdateCommand1.Parameters.Add(New System.Data.SqlClient.SqlParameter("@Original_Region", System.Data.SqlDbType.NVarChar, 15, _ System.Data.ParameterDirection.Input, False, CType(0, Byte), CType(0, Byte), "Region", System.Data.DataRowVersion.Original, Nothing)) ' 'Customers1 ' Me.Customers1.DataSetName = "Customers" Me.Customers1.Locale = New System.Globalization.CultureInfo("en-US") CType(Me.Customers1, System.ComponentModel.ISupportInitialize).EndInit() End Sub Protected WithEvents SqlDataAdapter1 As System.Data.SqlClient.SqlDataAdapter Protected WithEvents SqlSelectCommand1 As System.Data.SqlClient.SqlCommand Protected WithEvents SqlInsertCommand1 As System.Data.SqlClient.SqlCommand Protected WithEvents SqlUpdateCommand1 As System.Data.SqlClient.SqlCommand Protected WithEvents SqlDeleteCommand1 As System.Data.SqlClient.SqlCommand Protected WithEvents SqlConnection1 As System.Data.SqlClient.SqlConnection Protected WithEvents Customers1 As MyWebDBApp04.Customers Protected WithEvents DataGrid1 As System.Web.UI.WebControls.DataGrid 'メモ : 次のプレースホルダ宣言は Web フォーム デザイナで必要です。 '削除および移動しないでください。 Private designerPlaceholderDeclaration As System.Object Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init ' CODEGEN: このメソッド呼び出しは Web フォーム デザイナで必要です。 ' コード エディタを使って変更しないでください。 InitializeComponent() End Sub #End Region Private Const DATASET_SESSION_KEY As String = "CustomersDataset" ''' ----------------------------------------------------------------------------- ''' <summary> ''' ページがロードされた時に発生します。 ''' </summary> ''' ----------------------------------------------------------------------------- Private Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load ' ページを初期化するユーザー コードをここに挿入します。 If Not IsPostBack Then Try Me.SqlConnection1.Open() Me.SqlDataAdapter1.Fill(Me.Customers1) Finally If Not Me.SqlConnection1 Is Nothing Then Me.SqlConnection1.Close() End Try Session.Add(DATASET_SESSION_KEY, Me.Customers1) Me.DataGrid_DataBind() Else Me.Customers1 = DirectCast(Session(DATASET_SESSION_KEY), Customers) End If End Sub ''' ----------------------------------------------------------------------------- ''' <summary> ''' 編集 が押下された時に発生します。 ''' </summary> ''' ----------------------------------------------------------------------------- Private Sub DataGrid1_EditCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles DataGrid1.EditCommand Me.DataGrid1.EditItemIndex = e.Item.ItemIndex Me.DataGrid_DataBind() End Sub ''' ----------------------------------------------------------------------------- ''' <summary> ''' 更新 が押下された時に発生します。 ''' </summary> ''' ----------------------------------------------------------------------------- Private Sub DataGrid1_UpdateCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles DataGrid1.UpdateCommand Dim customerId As String = CStr(Me.DataGrid1.DataKeys(e.Item.ItemIndex)) Dim companyName As String = DirectCast(e.Item.Cells(1).Controls(1), TextBox).Text Dim contactName As String = DirectCast(e.Item.Cells(2).Controls(1), TextBox).Text Dim phone As String = DirectCast(e.Item.Cells(3).Controls(1), TextBox).Text Dim fax As String = DirectCast(e.Item.Cells(4).Controls(1), TextBox).Text ' 更新 Dim row As Customers.CustomersRow = Me.Customers1.Customers(e.Item.ItemIndex) With row .BeginEdit() .CompanyName = companyName .ContactName = contactName .Phone = phone .Fax = fax .EndEdit() End With Me.Update_DataSet() ' 元に戻す Me.DataGrid1.EditItemIndex = -1 Me.DataGrid_DataBind() End Sub ''' ----------------------------------------------------------------------------- ''' <summary> ''' キャンセル が押下された時に発生します。 ''' </summary> ''' ----------------------------------------------------------------------------- Private Sub DataGrid1_CancelCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles DataGrid1.CancelCommand Me.DataGrid1.EditItemIndex = -1 Me.DataGrid_DataBind() End Sub ''' ----------------------------------------------------------------------------- ''' <summary> ''' 削除 が押下された時に発生します。 ''' </summary> ''' ----------------------------------------------------------------------------- Private Sub DataGrid1_DeleteCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles DataGrid1.DeleteCommand Dim row As Customers.CustomersRow = Me.Customers1.Customers(e.Item.ItemIndex) row.Delete() Me.Update_DataSet() Me.DataGrid_DataBind() End Sub Private Sub DataGrid_DataBind() Me.DataGrid1.DataSource = Me.Customers1 Me.DataGrid1.DataBind() End Sub Private Sub Update_DataSet() Try Me.SqlConnection1.Open() Me.SqlDataAdapter1.Update(Me.Customers1) Finally If Not Me.SqlConnection1 Is Nothing Then Me.SqlConnection1.Close() End Try End Sub End Classちなみに、WebForm1.aspx は以下の様になっているはずです。
<%@ Page Language="vb" AutoEventWireup="false" Codebehind="WebForm1.aspx.vb" Inherits="MyWebDBApp04.WebForm1"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> <title>WebForm1</title> <meta name="GENERATOR" content="Microsoft Visual Studio .NET 7.1"> <meta name="CODE_LANGUAGE" content="Visual Basic .NET 7.1"> <meta name="vs_defaultClientScript" content="JavaScript"> <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5"> </HEAD> <body MS_POSITIONING="GridLayout"> <form id="Form1" method="post" runat="server"> <asp:DataGrid id=DataGrid1 style="Z-INDEX: 101; LEFT: 8px; POSITION: absolute; TOP: 8px" runat="server" DataSource='<%# Customers1 %>' DataKeyField="CustomerID" DataMember="Customers" AutoGenerateColumns="False"> <Columns> <asp:BoundColumn DataField="CustomerID" SortExpression="CustomerID" ReadOnly="True" HeaderText="CustomerID"></asp:BoundColumn> <asp:TemplateColumn HeaderText="CompanyName"> <ItemTemplate> <asp:Label runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.CompanyName") %>'> </asp:Label> </ItemTemplate> <EditItemTemplate> <asp:TextBox runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.CompanyName") %>'> </asp:TextBox> </EditItemTemplate> </asp:TemplateColumn> <asp:TemplateColumn HeaderText="ContactName"> <ItemTemplate> <asp:Label runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.ContactName") %>'> </asp:Label> </ItemTemplate> <EditItemTemplate> <asp:TextBox runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.ContactName") %>'> </asp:TextBox> </EditItemTemplate> </asp:TemplateColumn> <asp:TemplateColumn HeaderText="Phone"> <ItemTemplate> <asp:Label runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.Phone") %>'> </asp:Label> </ItemTemplate> <EditItemTemplate> <asp:TextBox runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.Phone") %>'> </asp:TextBox> </EditItemTemplate> </asp:TemplateColumn> <asp:TemplateColumn HeaderText="Fax"> <ItemTemplate> <asp:Label runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.Fax") %>'> </asp:Label> </ItemTemplate> <EditItemTemplate> <asp:TextBox runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.Fax") %>'> </asp:TextBox> </EditItemTemplate> </asp:TemplateColumn> <asp:EditCommandColumn ButtonType="LinkButton" UpdateText="更新" CancelText="キャンセル" EditText="編集"></asp:EditCommandColumn> <asp:ButtonColumn Text="削除" CommandName="Delete"></asp:ButtonColumn> </Columns> </asp:DataGrid> </form> </body> </HTML>
データ接続を作成する際、SQL Server への認証を「Windows 認証」にしました。
ASP.NET の場合は、実行時に SQL Server へログオンするのは、ASPNET ユーザーになります。
その為、SQL Server にログインする権限がないとエラーが発生します。
ASPNET ユーザーに権限を与える方法もありますが、通常は "偽装" と呼ばれるテクニックを使います。
偽装をする為にもっともポピュラーな方法は、web.config ファイルに以下の一文を追記します。
<identity impersonate="true" userName="SQL Server にアクセスできる権限のあるユーザー名" password="userName に記述したユーザーの Windows ログオンパスワード" />
■デバッグ実行!
コードの入力が終わったら、メニューバーの[デバッグ]→[開始]をクリックしましょう。

上のような画面が出現したら、編集→キャンセル・編集→更新・削除と一通りやってみてください。
SQL Server 側の該当テーブルで データの内容が 画面表示と同じになっていれば大成功です。
画面右上の×ボタンをクリックしてプログラムを終了させて下さい。
■ひとこと
デザイナでちょっといじって、少量のコードを書くだけで実現できますね。
編集になった時のコントロールは、TextBox 以外に変えることができます。
デザイナ上で、DataGrid を右クリックして、テンプレートの編集を選択し、
コントロールを変えたい列を選択します。
EditItemTemplate の中に デフォルトだと TextBox が入っていますが、例えばこれを DropDown にする場合は
もともと入っている TextBox を削除して、DropDown をツールボックスからドラッグしてやります。
DropDown のプロパティ等の編集が終わったら、右クリック→テンプレート編集の終了を選択して、完了です。