- - PR -
DataGridのPageIndexChangedのエラー
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2004-02-29 21:26
DataGridのページ機能を利用し、2ページ目を表示しようとしたところ、
次のようなエラーが発生しました。 「'Fill' を呼び出す前に、SelectCommand プロパティが初期化されませんでした。」 MSDN等で確認しましたが、DataGridのPageIndexChanged ではSelectCommand プロパティ の初期化についての説明がないんですが・・・。 何が原因でエラーが発生するのでしょうか。また、どう対応すればよいのでしょうか。 ◆処理内容 Public Class WebForm2 Inherits System.Web.UI.Page Protected WithEvents Label3 As System.Web.UI.WebControls.Label Protected WithEvents DataGrid1 As System.Web.UI.WebControls.DataGrid Protected WithEvents Button1 As System.Web.UI.WebControls.Button Dim oraDataAdapter As New OracleDataAdapter() Dim oraDataSet As New DataSet() Private Sub Page_Load(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles MyBase.Load ' ページを初期化する ユーザー コードをここに挿入します。 If Not IsPostBack Then Dim oraConnString As String =ConfigurationSettings.AppSettings("ConnStr") Dim oraConnection As NewOracleConnection(oraConnString) Dim oraSelectQuery As String = "" oraConnection.Open() oraSelectQuery = "SELECT id FROM view WHERE cd=:param1" Dim oraCommand As New OracleCommand(oraSelectQuery, oraConnection) oraCommand.Parameters.Add("param1",OracleType.VarChar, 3).Direction =ParameterDirection.Input oraCommand.Parameters.Item("param1").Value = "AAA" oraDataAdapter.SelectCommand = oraCommand oraDataAdapter.Fill(oraDataSet) DataGrid1.DataSource = oraDataSet DataGrid1.DataBind() oraConnection.Close() End If End Sub Private Sub DataGrid1_PageIndexChanged(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridPageChangedEventArgs) Handles DataGrid1.PageIndexChanged DataGrid1.CurrentPageIndex = e.NewPageIndex oraDataAdapter.Fill(oraDataSet) DataGrid1.DataBind() End Sub End Class ◆エラー 'Fill' を呼び出す前に、SelectCommand プロパティが初期化されませんでした。 説明 : 現在の Web 要求を実行中に、ハンドルされていない例外が発生しました。エラーに関する詳細および例外の発生場所については、スタック トレースを参照してください。 例外の詳細: System.InvalidOperationException: 'Fill' を呼び出す前に、SelectCommand プロパティが初期化されませんでした。 ソース エラー: 行 81: Private Sub DataGrid1_PageIndexChanged(ByVal source As Object,ByVal e As System.Web.UI.WebControls.DataGridPageChangedEventArgs) Handles DataGrid1.PageIndexChanged 行 82: DataGrid1.CurrentPageIndex =e.NewPageIndex 行 83: oraDataAdapter.Fill(oraDataSet) 行 84: DataGrid1.DataBind() 行 85: End Sub ソース ファイル : C:\\\\Inetpub\\\\wwwroot\\\\SOL1\\\\PRJ1\\\\WEBFORM1.aspx.vb 行 : 83 スタック トレース: [InvalidOperationException: 'Fill'を呼び出す前に、SelectCommand プロパティが初期化されませんでした。] System.Data.Common.DbDataAdapter.Fill(DataSet dataSet,Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) +122 System.Data.Common.DbDataAdapter.Fill(DataSet dataSet) +38 NE10010.WebForm2.DataGrid1_PageIndexChanged(Object source, DataGridPageChangedEventArgs e) in C:\\\\Inetpub\\\\wwwroot\\\\SOL1\\\\PRJ1 \\\\WEBFORM1.aspx.vb:83 System.Web.UI.WebControls.DataGrid.OnPageIndexChanged(DataGridPageChangedEventArgse) +110 System.Web.UI.WebControls.DataGrid.OnBubbleEvent(Objectsource, EventArgs e) +349 System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +26 System.Web.UI.WebControls.DataGridItem.OnBubbleEvent(Objectsource, EventArgs e) +100 System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +26 System.Web.UI.WebControls.LinkButton.OnCommand(CommandEventArgse) +120 System.Web.UI.WebControls.LinkButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +115 System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandlersourceControl, String eventArgument) +18 System.Web.UI.Page.RaisePostBackEvent(NameValueCollectionpostData) +138 System.Web.UI.Page.ProcessRequestMain() +1277 -------------------------------------------------------------------------------- バージョン情報 : Microsoft .NET Framework バージョン :1.1.4322.573; ASP.NET Version:1.1.4322.573 ◆環境 Win2000 Pro .NET Framework1.1 VS.NET2002 (言語:VB) .NET Managed Provider For Oracle oracle7.3.4 |
|
投稿日時: 2004-02-29 21:42
単純にDataGrid1_PageIndexChangedでoraCommandを設定してないからでは?
WebアプリではPostBackが発生するたびにオブジェクトは破棄されます。 |
|
投稿日時: 2004-02-29 22:21
burton999さん、ご回答ありがとうございます。
PageIndexChangedでoraCommandを設定すると全件取得してしまう為 全ページが1ページ目と同じになってしまう気がしたので、試していなかったのです が・・・。(素人の知識不足でごめんなさい) 当たり前ですが、表示する件数が17件、DataGrid1のページ行数が15の場合にDataGrid1 のページ:2を画面から指定したら、1ページ目に表示されていない2件が 2ページ目に表示されるのですよね? |
|
投稿日時: 2004-03-01 10:37
Page_Loadと内容を、以下のようにPageIndexChangedにSelectCommandを設定したのですが、
DataGrid1のページ:2を選択すると、DataGridが表示されません。 何がいけないのでしょうか? ◆処理内容 Private Sub DataGrid1_PageIndexChanged(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridPageChangedEventArgs) Handles DataGrid1.PageIndexChanged Dim oraConnString As String = ConfigurationSettings.AppSettings("ConnStr") Dim oraConnection As New OracleConnection(oraConnString) Dim oraSelectQuery As String = "" oraConnection.Open() oraSelectQuery = "SELECT id FROM view WHERE cd=:param1" Dim oraCommand As New OracleCommand(oraSelectQuery, oraConnection) oraCommand.Parameters.Add("param1", OracleType.VarChar, 3).Direction = ParameterDirection.Input oraCommand.Parameters.Item("param1").Value = "AAA" oraDataAdapter.SelectCommand = oraCommand DataGrid1.CurrentPageIndex = e.NewPageIndex oraDataAdapter.Fill(oraDataSet) DataGrid1.DataBind() End Sub |
|
投稿日時: 2004-03-01 11:52
ども、無月です。
今回のこの問題ですが、おそらく ページ切り替えのときに新しくデータを持ってくるのはいいのですが カレントページの切り替えを行っていない、というのが原因ではないでしょうか なので、メソッドの最後でCurrentPageIndexの値を操作してやれば解決できるのではないかと思います |
|
投稿日時: 2004-03-01 12:16
DataGrid1_PageIndexChangedに
DataGrid1.DataSource = oraDataSet を追加してください。 |
|
投稿日時: 2004-03-02 00:49
みなさんありがとうございました。
おかげでうまくいきました。 |
1