- PR -

ASP.NETのDataGridの編集モードでのDBの更新

1
投稿者投稿内容
未記入
会議室デビュー日: 2005/05/06
投稿数: 5
投稿日時: 2005-05-13 17:43
[OS:Windows2000]
[ASP.NET(VB)]

こんにちは。
ASP.NETのDataGridの編集モードでDBを更新しようと思いましたが,
更新できませんでした。
テキストボックスの値を変更してもUpdateCommandイベントでその値が
反映されず,変更前の値に変更されてしまうのです。
理由がわかりませんのでよければご教授ください。

[WebForm1.aspx]
コード:
<asp:DataGrid ID="dg" Runat="server" AutoGenerateColumns="False" Font-Size="80%">
	<Columns>
		<asp:BoundColumn DataField="au_id" HeaderText="ID" ReadOnly="True" />
		<asp:BoundColumn DataField="au_lname" HeaderText="LastName" />
		<asp:BoundColumn DataField="au_fname" HeaderText="FirstName"/>
		<asp:BoundColumn DataField="state" HeaderText="State" />
		<asp:EditCommandColumn UpdateText="更新" CancelText="キャンセル" EditText="編集" />
		<asp:ButtonColumn Text="削除" CommandName="Delete" />
	</Columns>
</asp:DataGrid>


[WebForm1.aspx.vb]
コード:
	Private Sub dg_UpdateCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles dg.UpdateCommand

		'選択行
		Dim row As DataGridItem = e.Item

		'テキストボックス
		Dim lnameText As TextBox = DirectCast(row.Cells(1).Controls(0), TextBox)
		Dim fnameText As TextBox = DirectCast(row.Cells(2).Controls(0), TextBox)
		Dim stateText As TextBox = DirectCast(row.Cells(3).Controls(0), TextBox)

		'SQLクエリ文字列
		Dim sb As System.Text.StringBuilder
		Dim sql As String

		'列のキー
		Dim au_id As String = DirectCast(dg.DataKeys.Item(row.ItemIndex), String)

		'接続
		Dim cn As SqlConnection

		'コマンド
		Dim cmd As SqlCommand

		Try
			'SQL文字列を設定
			sb = New System.Text.StringBuilder
			sb.Append("UPDATE authors SET ")
			sb.Append("au_lname = @au_lname, ")
			sb.Append("au_fname = @au_fname, ")
			sb.Append("state = @state ")
			sb.Append("WHERE au_id = @au_id;")
			sql = sb.ToString()

			'SQLServer接続
			cn = New SqlConnection(ConfigurationSettings.AppSettings.Item("ConnectionString"))

			'コマンド
			cmd = New SqlCommand(sql, cn)

			'パラメータ設定
			cmd.Parameters.Add("@au_lname", lnameText.Text) '←テキストボックスを変更してもここは元の値のまま
			cmd.Parameters.Add("@au_fname", fnameText.Text)
			cmd.Parameters.Add("@state", stateText.Text)
			cmd.Parameters.Add("@au_id", au_id)

			'クエリを実行
			cn.Open()
			Console.WriteLine(cmd.ExecuteNonQuery())

			'編集モードを解除してデータバインディング
			msg.Text = (dg.EditItemIndex + 1).ToString() & "番目の行が更新されました。"
			dg.EditItemIndex = -1
			Me.GridToBind()

		Finally
			If Not IsNothing(cmd) Then cmd.Dispose()
			If Not IsNothing(cn) Then cn.Close()
		End Try
	End Sub

1

スキルアップ/キャリアアップ(JOB@IT)