[SPRN06533]【VS2005】【データ連結】DataSourceオブジェクトでSelectコマンドのパラメータソースにコントロールを指定した場合、UpdateCommandイベントでセルの値を取得できないことがある
対象製品
SPREAD for .NET 2.5J Web Forms Edition
発生環境
この現象は、Visual Studio 2005を使用した開発環境で発生します
詳細
AccessDataSourceやSQLDataSourceのSelectコマンドにWHERE句を使用し、パラメータソースにコントロール(例:TextBox)を指定した場合、UpdateCommandイベントで次の様にセルの値を取得しようとすると正しい値が取得できないことがあります。
Protected Sub FpSpread1_UpdateCommand(ByVal sender As Object, ByVal e As FarPoint.Web.Spread.SpreadCommandEventArgs) Handles FpSpread1.UpdateCommand
Dim oldVal As String = CStr(e.SheetView.GetValue(0, 1))
Label1.Text = oldVal
End Sub
Protected Sub FpSpread1_UpdateCommand(ByVal sender As Object, ByVal e As FarPoint.Web.Spread.SpreadCommandEventArgs) Handles FpSpread1.UpdateCommand
Dim oldVal As String = CStr(e.SheetView.GetValue(0, 1))
Label1.Text = oldVal
End Sub
回避方法
TextBoxにViewStateがロードされる前に、SPREADのデータバインドが行われることが原因です。
以下のようにPage.LoadイベントでTextBoxの値をセッション変数に格納し、次回のポストバックの際にPage.Initで取得することで現象を回避できます。
Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init
If Me.IsPostBack Then
Me.TextBox1.Text = Session("txtValue")
End If
End Sub
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Session("txtValue") = Me.TextBox1.Text
End Sub
以下のようにPage.LoadイベントでTextBoxの値をセッション変数に格納し、次回のポストバックの際にPage.Initで取得することで現象を回避できます。
Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init
If Me.IsPostBack Then
Me.TextBox1.Text = Session("txtValue")
End If
End Sub
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Session("txtValue") = Me.TextBox1.Text
End Sub
この文書は、以前は次のFAQ IDで公開されていました : 7241