- PR -

【ASP.NET】Labelの更新(PostBackについて?)

投稿者投稿内容
んちょ。
常連さん
会議室デビュー日: 2006/02/22
投稿数: 28
投稿日時: 2006-03-13 14:56
同一フォームにLabelとTextBoxとButtonがあり、
Labelにはデータバインドしたデータを表示しています。
TextBoxには変更内容を入力し、Buttonを押すと
データに変更(更新)をかけるようにしようと思っています。

更新まではできたのですが、Labelに反映されません。
ページロード内のLabelに表示するためのデータバインドにおけるポストバックを
記述しないと、Buttonを二回押すと反映されるのですが、
ポストバックを記述すると反映されません。

ボタンクリックイベントにlabelの更新の記述をしたらいけると思うのですが(?)
どのように書けばよいのでしょうか。
よろしくお願いします。
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2006-03-13 15:03
ボタンクリックイベント内で、データの更新をしたあとにデータバインドを
実行すればいいような気がしますが。。。
んちょ。
常連さん
会議室デビュー日: 2006/02/22
投稿数: 28
投稿日時: 2006-03-14 09:11
自分も どっとねっとふぁんさんのおっしゃる通りしたのですが、
反映されません。
ボタンを押したらすぐにテキストボックスの内容をラベルに表示するには
なにかまだ別に記述するかしないといけないのでしょうか。
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-03-14 09:20
データバインド辺りのコードを見せてもらってもよろしいですか?
_________________
囚人のジレンマな日々
甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2006-03-14 10:53
引用:

courageさんの書き込み (2006-03-14 09:11) より:
ボタンを押したらすぐにテキストボックスの内容をラベルに表示するには
なにかまだ別に記述するかしないといけないのでしょうか。


ポストバック時も毎回初期値を設定していると言う、初心者にありがちなミスな予感がします。ラベルの内容を変更している場所全てにブレークポイントを置いて、どのように動作しているか精査してください。
_________________
甕星 <mikahosi@abox9.so-net.ne.jp>
http://blogs.msmvp.jp/mikahosi/
んちょ。
常連さん
会議室デビュー日: 2006/02/22
投稿数: 28
投稿日時: 2006-03-14 13:28
RegisterButtonを押下するとCheckerTextBoxの内容をNameViewLabelに反映する(データベース更新)

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' ページを初期化するユーザー コードをここに挿入します。

'クエリ文字列の受け取りと代入
Dim month As String
month = Request.QueryString("month")
'選択月をSessionにデータを退避しておく
Session("Month") = month


If Not IsPostBack Then
SqlDataAdapter1.Fill(ListSelectDataSet1)
ListSelectDataView1.RowFilter = "部署CD ='" & User.Identity.Name & "'and 回答年月=" & month
DataGrid1.DataBind()
End If

'M_点検者から点検者名を表示
If Not IsPostBack Then
Dim cn As New SqlConnection(ConfigurationSettings.AppSettings("cnstr"))
Dim cmd As New SqlCommand("Select 点検者 From M_点検者 Where 部署CD ='" & User.Identity.Name & "'and 回答年月=" & month, cn)
cn.Open()
'一行だけ読み取るときはExecuteScalar、読んだデータがNULLか評価する場合はDBNullを使う
NameViewLabel.Text = IIf(cmd.ExecuteScalar() Is DBNull.Value, "<未入力>", cmd.ExecuteScalar())

'処理済の場合、点検者名入力テキストボックス(CheckerTextBox)及び登録ボタン(RegisterButton)は非表示
Dim cmd2 As New SqlCommand("Select 状態 From M_回答年月 Where 回答年月=" & month, cn)
Dim state As Integer = cmd2.ExecuteScalar
If state <> 1 Then
CheckerTextBox.Enabled = False
CheckerTextBox.Visible = False
RegisterButton.Enabled = False
RegisterButton.Visible = False
End If

cn.Close()
End If
End Sub

Private Sub RegisterButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RegisterButton.Click

If NameViewLabel.Text = "<未入力>" And CheckerTextBox.Text = "" Then
MessageLabel.Text = "点検者名を入力してください!"
Exit Sub
End If

Dim cn As New SqlConnection(ConfigurationSettings.AppSettings("cnstr"))
Dim cmd As New SqlCommand("Proc点検者更新", cn)
cmd.CommandType = CommandType.StoredProcedure
Dim BushoCD As SqlParameter = cmd.Parameters.Add("@BushoCD", SqlDbType.NVarChar, 3)
BushoCD.Value = User.Identity.Name
Dim month As SqlParameter = cmd.Parameters.Add("@month", SqlDbType.Int, 20)
month.Value = Request.QueryString("month")
Dim CheckerName As SqlParameter = cmd.Parameters.Add("@CheckerName", SqlDbType.NVarChar, 20)
CheckerName.Value = CheckerTextBox.Text
cn.Open()
cmd.ExecuteNonQuery()

Dim month2 As String
month2 = Request.QueryString("month")

Dim cmd2 As New SqlCommand("Select 点検者 From M_点検者 Where 部署CD ='" & User.Identity.Name & "'and 回答年月=" & month2, cn)
NameViewLabel.Text = cmd.ExecuteScalar()

cn.Close()

End Sub
End Class

よろしくおねがいします。
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2006-03-14 15:07
これって、データバインドとはいわないよーな。。。
単純にデータとってきていれてるだけですよね。

で、原因はデータの更新とデータの検索で同じコネクションを使いまわしてるからだと思います。
データの更新時に一度コネクションを閉じないと、その更新は反映されないんじゃないかと思います。
更新が反映されていない状態でデータを検索してきてしまって、そのあとコネクションを閉じることにより更新が反映される、という状況になっているんじゃないでしょうか。

んちょ。
常連さん
会議室デビュー日: 2006/02/22
投稿数: 28
投稿日時: 2006-03-14 15:33
あ。。。なっなっ
確かにデータバインドなんてしてませんねorz

すみません。

で、続きなのですが、

Dim CheckerName As SqlParameter = cmd.Parameters.Add("@CheckerName", SqlDbType.NVarChar, 20)
CheckerName.Value = CheckerTextBox.Text
cn.Open()
cmd.ExecuteNonQuery()
cn.Close()

Dim month2 As String
month2 = Request.QueryString("month")

Dim cn2 As New SqlConnection(ConfigurationSettings.AppSettings("cnstr"))
Dim cmd2 As New SqlCommand("Select 点検者 From M_点検者 Where 部署CD ='" & User.Identity.Name & "'and 回答年月=" & month2, cn)
cn2.Open()
NameViewLabel.Text = cmd.ExecuteScalar()
cn2.Close()

こんなかんじにしたのですが、いぜんとしてかわりありません。

そもそも分かってないんでしょうか。
ご教授願います

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