- PR -

DataGridのPageIndexChangedのエラー

1
投稿者投稿内容
hur0308
常連さん
会議室デビュー日: 2004/02/13
投稿数: 20
投稿日時: 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
burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2004-02-29 21:42
単純にDataGrid1_PageIndexChangedでoraCommandを設定してないからでは?
WebアプリではPostBackが発生するたびにオブジェクトは破棄されます。
hur0308
常連さん
会議室デビュー日: 2004/02/13
投稿数: 20
投稿日時: 2004-02-29 22:21
burton999さん、ご回答ありがとうございます。

PageIndexChangedでoraCommandを設定すると全件取得してしまう為
全ページが1ページ目と同じになってしまう気がしたので、試していなかったのです
が・・・。(素人の知識不足でごめんなさい)

当たり前ですが、表示する件数が17件、DataGrid1のページ行数が15の場合にDataGrid1
のページ:2を画面から指定したら、1ページ目に表示されていない2件が
2ページ目に表示されるのですよね?
hur0308
常連さん
会議室デビュー日: 2004/02/13
投稿数: 20
投稿日時: 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
無月 重造
ベテラン
会議室デビュー日: 2003/12/18
投稿数: 67
投稿日時: 2004-03-01 11:52
ども、無月です。

今回のこの問題ですが、おそらく

ページ切り替えのときに新しくデータを持ってくるのはいいのですが
カレントページの切り替えを行っていない、というのが原因ではないでしょうか

なので、メソッドの最後でCurrentPageIndexの値を操作してやれば解決できるのではないかと思います
burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2004-03-01 12:16
DataGrid1_PageIndexChangedに
DataGrid1.DataSource = oraDataSet
を追加してください。
hur0308
常連さん
会議室デビュー日: 2004/02/13
投稿数: 20
投稿日時: 2004-03-02 00:49
みなさんありがとうございました。
おかげでうまくいきました。
1

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