- - PR -
DataGridへの結果表示
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-03-09 08:07
で、メソッドの呼び出し順は、どのようだったのが、どのように変わりましたか? | ||||
|
投稿日時: 2004-03-09 15:55
***************************************************************************
Private Sub SearchBtn02_Click(ByVal sender As System.Object, ByVal e As _ System.EventArgs) Handles SearchBtn02.Click WhereSortRequest = "where life_staff like " & "'%" & _ LifeStaffLst.SelectedItem.Text & "%'" & " and confi_time is null" Session("PageNo") = 0 BindGrid("*", WhereSortRequest) End Sub *************************************************************************** に変更したところ 変更前に PageLoadメソッドのPostBack⇒SearchBtn02_Clickメソッド ⇒PageLoadメソッドのNot PostBack だったものが、変更後には PageLoadメソッドのPostBack⇒SearchBtn02_Clickメソッド ⇒PageLoadメソッドのPostBack に呼び出し順が変わりました。 | ||||
|
投稿日時: 2004-03-09 15:59
追記:
Page_Loadメソッドは以下のように変更しました。 ********************************************************************** Private Sub Page_Load(ByVal sender As System.Object, ByVal e As _ System.EventArgs) Handles MyBase.Load If Not IsPostBack Then SqlDataAdapter_Grid.Fill(DataSet_receipt) SqlDataAdapter_staff.Fill(DataSet_staff) DataBind() WhereSortRequest = Session("WhereSortRequest") If WhereSortRequest = "" Then WhereSortRequest = "Order by receipt_id desc" End If BindGrid("*", WhereSortRequest) End If End Sub ********************************************************************** | ||||
|
投稿日時: 2004-03-09 16:07
??なぜPageLoadの呼び出しが2回? 変更前は、Redirectしていたので、NotPostBackでPageLoadがコールされるのですが、変更後になぜ?JavaScriptか何か、一緒に出していますか? 最初に掲示されたコードで、BindGridを呼び出している部分がありませんから、削除されているコードがあると判断します。掲載するために削除したコードで、何かしていませんか? この問は、 CLIENTの要求→SERVER:PageLoad(NotPostBack)→CLIENT表示 CLIENTでボタンクリック→SERVER:PageLoad(PostBack)→SERVER:イベント→CLIENT表示 となると予想される動作が、 CLIENTの要求→SERVER:PageLoad(NotPostBack)→CLIENT表示 CLIENTでボタンクリック→SERVER:PageLoad(PostBack)→SERVER:イベント→CLIENT表示→(何らかの要求)→SERVER:PageLoad(PostBack)→CLIENT表示 となっているため、「何らかの要求」を明らかにすることを目的としています。 | ||||
|
投稿日時: 2004-03-09 16:21
引用:
-------------------------------------------------------------------------------- ??なぜPageLoadの呼び出しが2回? 変更前は、Redirectしていたので、NotPostBackでPageLoadがコールされるのですが、変更後になぜ?JavaScriptか何か、一緒に出していますか? 最初に掲示されたコードで、BindGridを呼び出している部分がありませんから、削除されているコードがあると判断します。掲載するために削除したコードで、何かしていませんか? -------------------------------------------------------------------------------- すいません。再確認したところ、 変更後の呼び出し順は、Jittaさんのおっっしゃるとおり PageLoadメソッドのPostBack⇒SearchBtn02_Clickメソッド となってました。 コードの変更は掲示した以外はありませんでした。 | ||||
|
投稿日時: 2004-03-09 18:05
う〜ん、プログラムでやっている処理を整理してみませんか?
3/9 15:59投稿分には If Not IsPostBack Then SqlDataAdapter_Grid.Fill(DataSet_receipt) SqlDataAdapter_staff.Fill(DataSet_staff) DataBind() WhereSortRequest = Session("WhereSortRequest") If WhereSortRequest = "" Then WhereSortRequest = "Order by receipt_id desc" End If BindGrid("*", WhereSortRequest) End If と、DataBindメソッドのコールが入っていますが、これはなんでしょう?3/8 10:06投稿分にはないですよね?削っているところで何をやっているのか、そこで何かが発生しているような? 1行ずつ「何をするか」を「日本語」で書き並べて、処理を整理してみませんか? それと、DataGridやページのViewStateは使用していますか? | ||||
|
投稿日時: 2004-03-09 19:14
引用:
-------------------------------------------------------------------------------- DataBindメソッドのコールが入っていますが、これはなんでしょう?3/8 10:06投稿分にはないですよね?削っているところで何をやっているのか、そこで何かが発生しているような? -------------------------------------------------------------------------------- 'DropDownList"LifeStaffLst"にstaff名をセットする為に必要だったんですが 必要なかったようです。 下記が処理を整理したものです。 SqlDataAdapter_Grid.Fill(DataSet_receipt) は、最初のPageLoad時に DataGridへテーブル"joho"の全レコードを表示させる為だったのですが 無くても表示されたので削除しました。 あとは、DataGridをDataGrid2と記述ミスしていたのを修正しました。 index.aspx.vb ***************************************************************** Imports System.Data Imports System.Data.SqlClient Public Class ConnectCheckList Inherits System.Web.UI.Page '接続文字列を作成し、データベース接続のインスタンスを作成する Dim SQLConnStr As String = "****************" Dim MyConnection As New SqlConnection(SQLConnStr) 'データベースのテーブル名の初期化と設定 Dim TableName0 As String = "joho" 'データセットを作成 Dim ds As DataSet = New DataSet 'データの並び方を設定する文字列の初期化 Dim WhereSortRequest As String 'DB接続インスタンスを利用して、DBの対象データとデータセットdsとの同期を行う、DataAdapterクラスのインスタンスを作成 'SQL文の結果テーブルを、データセットdsにTableName名でデータを入れる Private Function sql_c(ByVal SQL As String) Dim MyCommand As New SqlDataAdapter(SQL, MyConnection) MyCommand.Fill(ds, TableName0) End Function Private Function BindGrid(ByVal ExtractRequest As String, ByVal _ SortRequest As String) '参照用のSQL文を作成し、sql_cメソッドを実行する Dim SQL As String = "select " & ExtractRequest & " from " & _ TableName0 & " " & SortRequest sql_c(SQL) DataGrid.DataSource = ds.Tables(TableName0).DefaultView 'データセット内のレコードデータをデバッグに表示 System.Diagnostics.Debug.WriteLine("--1行目1列目(" & ds.Tables _ (TableName0).Rows(0).Item(0) & "), 2列目(" & ds.Tables(TableName0).Rows(0).Item(1) & ")") System.Diagnostics.Debug.WriteLine("--2行目1列目(" & ds.Tables _ (TableName0).Rows(1).Item(0) & "), 2列目(" & ds.Tables(TableName0).Rows(1).Item(1) & ")") DataGrid.CurrentPageIndex = Session("PageNo") DataGrid.DataBind() 'データの件数を" EntryDataCountlbl"に表示する If DataGrid.Items.Count = 0 Then EntryDataCountlbl.Text = "該当データがありません。" Else EntryDataCountlbl.Text = ds.Tables(TableName0).DefaultView.Count().ToString & "件の要件があります。" End If End Function Private Sub Page_Load(ByVal sender As System.Object, ByVal e As _ System.EventArgs) Handles MyBase.Load If Not IsPostBack Then 'DropDownList"LifeStaffLst"にstaff名をセット SqlDataAdapter_staff.Fill(DataSet_staff) 'Session変数からデータの並び方を得る WhereSortRequest = Session("WhereSortRequest") 'WhereSortRequestが空の場合"Order by id desc"で全件表示 If WhereSortRequest = "" Then WhereSortRequest = "Order by id desc" End If BindGrid("*", WhereSortRequest) End If End Sub Private Sub SearchBtn01_Click(ByVal sender As System.Object, ByVal _ e As System.EventArgs) Handles SearchBtn01.Click 'DropDownList"LifeStaffLst"で選択したstaff名で抽出するSQL文作成 WhereSortRequest = "where staff like " & "'%" & _ StaffLst.SelectedItem.Text & "%'"" Session("PageNo") = 0 BindGrid("*", WhereSortRequest) End Sub ************************************************************************ [ メッセージ編集済み 編集者: tetsuya11 編集日時 2004-03-09 19:20 ] | ||||
|
投稿日時: 2004-03-09 21:06
う〜ん?
仕様は、
ですよね。 絞り込み条件ですが、「%入力%」となっていますが、「入力」が実は全件に共通して存在している、なんてことはないですよね? たとえば、 123-ABC-zxcv ABC-GHT-asdf 678-QQQ-abcd というデータで、「ABC」を絞り込み条件にしているとか。 Page_Loadメソッド、SearchBtn01_Clickメソッド、BindGridメソッド、それぞれの入り口にブレークポイントをはって、デバッグ実行してください。 すると、Page_Loadで止まって、If文の中に入ります。BindGridに移って、全件表示されます。 次にポストバックが発生すると、Page_Loadで止まって、If文に入らず抜けます。そしてSearchBtn01_Clickで止まります。 この中でBindGridに入る前後で、これへの引数の内容が一致しているか、確認してください。 そういえば、PageNoをセッション変数に入れていますが、絞り込みを行うので、たとえば5ページ目を表示していて、絞り込み後に3ページしかなくなると、ここで例外が発生しますよ。 ん?DataGridの選択とか、ページ遷移とかで、何かやっていませんか?それらにもブレークポイントをはって、それぞれで追いかけてみてください。詰まってしまうと視野が狭くなりますが、実は変更したところ以外のところで仕様外の動作が発生していることが、よくあります。 |