- PR -

ASP.NETのDB更新について

1
投稿者投稿内容
.NET初心者
会議室デビュー日: 2005/12/12
投稿数: 2
投稿日時: 2005-12-12 05:47
はじめまして、こんばんは。
私はASP.NET(VB.NET)でWebアプリケーションの開発を行っています。
当方、まったくの初心者でWeb開発なども経験がない為困りはてています。

以下ソース

Private Sub DataGrid1_UpdateCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles DataGrid1.UpdateCommand
'更新

Dim strSqlUpdate As String = "UPDATE T_syouhin SET カテゴリコード=@Category," & _
"価格=@Price, 画像パス=@Path, 商品名=@Name," & _
"小カテゴリコード=@Scategory, 数量=@Quantity " & _
"WHERE 商品コード=@ID"

Dim cmd As New OleDb.OleDbCommand(strSqlUpdate, OleDbConnection1)

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

Dim strName As String = CType(e.Item.FindControl("nameTextBox"), TextBox).Text

Dim intCategory As Integer = CType(e.Item.FindControl("DropdownList1"), DropDownList).SelectedValue

Dim intSCategory As Integer = CType(e.Item.FindControl("DropdownList2"), DropDownList).SelectedValue

Dim intQuantity As Integer = CType(e.Item.FindControl("quantityTextBox"), TextBox).Text

Dim intPrice As Integer = CType(e.Item.FindControl("priceTextBox"), TextBox).Text
Dim strPath As String = CType(e.Item.FindControl("pathTextBox"), TextBox).Text


With cmd.Parameters
.Add("@ID", intID)
.Add("@Name", strName)
.Add("@Category", intCategory)
.Add("@SCategory", intSCategory)
.Add("@Quantity", intQuantity)
.Add("@Price", intPrice)
.Add("@Path", strPath)
End With

OleDbConnection1.Open()
cmd.ExecuteNonQuery()
OleDbConnection1.Close()

DataGrid1.EditItemIndex = -1
OleDbDataAdapter1.Fill(DataSet11)
DataGrid1.DataBind()
End Sub
-----------------------------------------------
このような感じでDataGrid内の更新ボタンの処理を書いています。
今回皆様に御聞きしたいことは、
CtypeにてTemplateColumn列から値をひろってきています。
しかし、ブレークポイントをおいて確認しましたが、
TextBoxの値の変更前の値をひろってきてしまいます。
つまり、変更後の値をひろいたいのです。
TemplateColumn列のTextBoxChangeEventなど考えましたが、
良い方法がわかりません。
(結局値が変わらず更新処理も正しいのかわからない状況のなですが、、、)

処理順序はこのような感じです。
編集ボタン(DataGrid1_EditCommand)

編集可能状態(DataGrid1.EditItemIndex = e.Item.ItemIndex と DataGrid1.DataBind())

TextBoxに値入力

更新ボタン(上記コード)

更新完了

とても初歩的なことと思いますが、どうかご教授いただけますようよろしくお願いします。

Access
ぬし
会議室デビュー日: 2002/04/08
投稿数: 829
投稿日時: 2005-12-12 06:19
引用:

しかし、ブレークポイントをおいて確認しましたが、
TextBoxの値の変更前の値をひろってきてしまいます。
つまり、変更後の値をひろいたいのです。
処理順序はこのような感じです。
編集ボタン(DataGrid1_EditCommand)

編集可能状態(DataGrid1.EditItemIndex = e.Item.ItemIndex と DataGrid1.DataBind())

TextBoxに値入力

更新ボタン(上記コード)

更新完了


更新ボタンのイベントハンドラが実行される前にDataGridがバインドされて
編集されたデータが編集前に戻っているようですね。Page_Loadイベントハンドラを再度チェックしてみたらどうでしょうか。

更新ボタン(上記コード)
↓←この時点ですでにDataGridがリフレッシュされている
更新完了


_________________
ASP.NET+Ajaxサンプル集

[ メッセージ編集済み 編集者: Access 編集日時 2005-12-13 06:24 ]
.NET初心者
会議室デビュー日: 2005/12/12
投稿数: 2
投稿日時: 2005-12-13 05:50
引用:

Accessさんの書き込み (2005-12-12 06:19) より:

更新ボタンのイベントハンドラが実行される前にDataGridがバインドされて
編集されたデータが編集前に戻っているようですね。Page_Loadイベントハンドラを再度チェックしてみだらどうでしょうか。

更新ボタン(上記コード)
↓←この時点ですでにDataGridにリフレッシュされている
更新完了



返信が遅くなってしまってすいません。
Accessさんのおっしゃる通りでした。

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

mstrCacheKey = "T_syouhin" & Request.Path

If Not IsPostBack Then
      LoadData()   'Fill
BindDataGrid() 'DataGridにバインド
Else
mdt = Cache(mstrCacheKey)
If mdt Is Nothing Then
LoadData()
End If
End If
View_Mode()
End Sub

ご教授いただきありがとうございました。

1

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