- - PR -
DataGridへの結果表示
1|2|3|4|5
次のページへ»
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-03-08 10:06
お世話になっております。
初歩的な質問となるかのしれませんが 初心者なので宜しくお願いします。 SQLSever2000を使用し、テーブル"joho"のレコードを DataGridに一覧表示させ、DropDownListで選択した条件で 検索した結果の件数と抽出したレコードを再表示させようと しているのですが、件数の結果は出るのですが、抽出した レコードは再表示されず、最初にPageLoadした時のまま(全件表示) です。 DataSetには抽出結果は入っているのですが。。。 ソースは下記のとおりです。 ご教授願いますよう宜しくお願いいたします。 **index.aspx*************** 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 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) Dim SQL As String = "select " & ExtractRequest & " from " & _ TableName0 & " " & SortRequest sql_c(SQL) DataGrid2.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) & ")") DataGrid2.CurrentPageIndex = Session("PageNo") DataGrid2.DataBind() If DataGrid.Items.Count = 0 Then EntryDataCountlbl.Text = "該当データがありません。" 'DataGrid.Visible = False 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 SqlConnection_receipt.Open() SqlDataAdapter_Grid.Fill(DataSet_receipt) SqlDataAdapter_staff.Fill(DataSet_staff) SqlConnection_receipt.Close() WhereSortRequest = Session("WhereSortRequest") If WhereSortRequest = "" Then WhereSortRequest = "Order by id desc" End If End If End Sub Private Sub SearchBtn01_Click(ByVal sender As System.Object, ByVal e _ As System.EventArgs) Handles SearchBtn01.Click Session("WhereSortRequest") = _ "where life_staff like " & "'%" & StaffLst.SelectedItem.Text & "%'"" Session("PageNo") = 0 Response.Redirect("index.aspx") End Sub End Class **************************************** | ||||
|
投稿日時: 2004-03-08 10:16
すいません。
下記のSession変数をGlobal.asaxに設定してあることを 記述してませんでした。 宜しくお願いします。 *************************************************************** Sub Session_Start(ByVal sender As Object, ByVal e As EventArgs) Dim PageIndexNum As Integer Session("PageNo") = PageIndexNum Dim WhereSortRequest As String Session("WhereSortRequest") = WhereSortRequest End Sub *************************************************************** | ||||
|
投稿日時: 2004-03-08 10:24
「初心者です」という言葉と、ソースの引用を組み合わせると、「私の仕事をあなたがやってください」と取られることがあるのでご注意。「初心者」と書くより、経験年数(月数)など、具体的な記述をしていただければ、どれくらい砕いて説明しなければならないかが、よく伝わります。「初心者」と書くことで、本当は初心ではないのに、懇切丁寧な説明を要求する輩もいますので、そういうのと区別してもらうためにも、気を付けてください。 それで、まずは考え方から、、、Webアプリケーションでは、クライアントにデータが戻されるごとにインスタンスがいったん破棄されます。したがって、クラス変数にせっかく取得値をセーブしたつもりでも、それらは消えてしまいます。セッション変数やアプリケーション変数など、永続化されるところに保存しないのであれば、ページロードごとに毎回取得しなければなりません。そうでなければ、ビューステートのものが表示されます。 まず、そこのところをなおしてみてください。 あと、Adapter.Fillに使うのであれば、SqlConnectionをOpen/Closeする必要はありません。Fillの内部で勝手にやってくれます。 | ||||
|
投稿日時: 2004-03-08 14:40
経験は3ヶ月です
質問内容に説明不足な部分があったようなので 補足させていただきます。 最初にPageLoadした時にテーブルのレコードをDataGridに 全件表示させます。 そして、条件を指定して、その結果をDataGridに表示させようと しています。 抽出結果は ------------------------------------------------------------------------ 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) & ")") ------------------------------------------------------------------------- で、デバックには、条件に合った期待どおりの結果が表示され、 ------------------------------------------------------------------------- If DataGrid.Items.Count = 0 Then EntryDataCountlbl.Text = "該当データがありません。" 'DataGrid.Visible = False Else EntryDataCountlbl.Text = ds.Tables(TableName0).DefaultView. _ Count().ToString & "件の要件があります。" End If ------------------------------------------------------------------------- で、抽出されたレコードの件数もカウントしているます。 しかし、DataBindにはデータが入っていない為か、 DataGridには抽出したレコードのデータではなく、 最初にPageLoadした時と同じ全件が表示されたままです。 なぜ、DataGridに抽出したレコードが表示されないのでしょうか? | ||||
|
投稿日時: 2004-03-08 16:35
このメソッドがすごく気になったのですが、このメソッドはいつ実行されるのでしょう?また、リダイレクト先の「index.aspx」とは、どういうページですか? ・・・?なんか、根本的に動作を誤解しているような? | ||||
|
投稿日時: 2004-03-08 17:05
引用:
-------------------------------------------------------------------------------- このメソッドがすごく気になったのですが、このメソッドはいつ実行されるのでしょう?また、リダイレクト先の「index.aspx」とは、どういうページですか? -------------------------------------------------------------------------------- 「index.aspx」には、 ・DropDownList"StaffLst" ・DataGrid ・Button"SearchBtn01" ・Label"EntryDataCountlbl" があります。 「index.aspx」をロードし、テーブル"joho"のレコードの全件を DataGridにさせ、DropDownList"StaffLst"で条件を選択し、 Button"SearchBtn01"をクリックすると -------------------------------------------------------------------------------- Private Sub SearchBtn01_Click(ByVal sender As System.Object, ByVal e _ As System.EventArgs) Handles SearchBtn01.Click Session("WhereSortRequest") = _ "where life_staff like " & "'%" & StaffLst.SelectedItem.Text & "%'"" Session("PageNo") = 0 Response.Redirect("index.aspx") End Sub -------------------------------------------------------------------------------- が実行され、「index.aspx」に検索した結果の件数をLabel"EntryDataCountlbl"へ、 そして抽出したレコードをDataGridに表示させようとしています。 | ||||
|
投稿日時: 2004-03-08 17:40
今のプログラムで、全てのメソッドの先頭にブレークポイントを置いて、どのような順番でメソッドが実行されるか、書き留めてみてください。また、その時々にIsPostBackがどのような値になっているかも、書き留めてみてください。それで期待通りの動作をしない理由がわかると思います。
Response.Redirectを実行すると、その時点でサーバのスレッドは停止し、クライアントにリダイレクト先のURLを引き渡します。クライアントはリダイレクトするという指示を受けとり、サーバへリダイレクト先のURLを要求します。これによって、Page_Loadメソッドがどのように処理されるか、わかりますか? Response.RedirectをBindGridの呼び出しに変更すれば、ご希望通りの動作になると思います。 | ||||
|
投稿日時: 2004-03-08 18:58
BindGridを呼び出すように変更しましたが、残念ながら状況は変わりません。
DataGrid2.DataBind() でバインドされてきません。 今回はDataGrid2.Items.Count が0になってしまいます。 直前のデータセットの中身を表示するとデータの抽出はできているのですが。 ※最初の投稿時のソースのDataGridとDataGrid2は同一のものです。 すいません記述ミスです。 |
1|2|3|4|5
次のページへ»