トップ回答者
Microsoftレポート パラメーター設定方法

質問
-
visualstudio2010 microsoftレポート(asp.net c#)において接続したデーターソースにパラメーター”p1”の設定をしたいと思い下記のように設定したのですがエラーが出てしまいました。お手数かけますが対処方法のアドバイスをいただけますようお願いします。
参考資料
SQL Server 2008 Reporting Services 応用(pdf) http://download.microsoft.com/download/7/2/5/72509A8A-91BF-40BF-8EA8-F56A1B586EFC/SQL08_SelfLearning10_SSRS2.pdf- 編集済み aquq 2012年9月5日 14:32 誤字修正のため
回答
-
ReportViewerの貼ってあるページをデザイン表示して、ReportViewer.LocalReport.DataSourcesに設定しているObjectDataSource1を右クリックして、データソースの構成を設定し直しましたか?
おそらくパラメータ無しの時点で設定したままになっているため、Select操作で使用するメソッドがTableAdapter.GetData()のままになっていると思われます。
これを改めてTableAdapter.GetData(int p1)に設定しなおしてやる必要があります。(引数のデータ型はパラメータの型による)
そうするとパラメータ定義画面が出てくるのでパラメータに入れる値を設定してやります。#ASP.netは全然つかってないのでWinFormとは勝手が違うなぁ
個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)
- 回答としてマーク aquq 2012年9月6日 13:10
-
参考資料は読んでいませんが、質問にアップされていた画像のエラーメッ
セージからエラーの原因は推定できますので、とりあえずそれを書いてお
きます。エラーメッセージの意味は「引数なしの GetData メソッドを探したが見つ
からなかった」ということです。ご自分の ObjectDataSource1 のソースを見てください。
ObjectDataSource1 は、TypeName プロパティに指定された TableAdapter
クラスに、SelectMethod プロパティに指定された名前のメソッド(今回の
場合 GetData)を探しに行きます。画像からは、そのあたりの設定は正し
くされているように見えます。しかし、SelectParameters が設定されてない(以下のページのコードを例
に取ると <selectparameters> ... </selectparameters> が存在しない)
のではないですか? その場合、ObjectDataSource1 は引数がないと判断し
て、引数なしの GetData メソッドを探しに行きます。ObjectDataSource.SelectParameters プロパティ
http://msdn.microsoft.com/ja-jp/library/system.web.ui.webcontrols.objectdatasource.selectparameters%28v=vs.100%29.aspx一方、ウィザードで型付 DataSet + TableAdapter を作ると、SELECT クエ
リに合わせて、TableAdapter には GetData(int p1) というシグネチャの
メソッドが自動生成されているはずです(TableAdapter のソースを確認し
てください)。TableAdapter には、引数なしの GetData メソッドは存在しないはずです。
存在しないので、見つからないというエラーになったと思われます。上記の推定が正しければ、SelectParameters を正しく設定すれば解決する
はずです。どのように設定するかは、p1 をどこから、どのタイミングで、
どのように取得するかによります。質問には、それらの情報が具体的に書
いてないので、回答者側ではどのように設定すればよいかは分かりません。- 回答としてマーク aquq 2012年9月6日 13:10
すべての返信
-
ReportViewerの貼ってあるページをデザイン表示して、ReportViewer.LocalReport.DataSourcesに設定しているObjectDataSource1を右クリックして、データソースの構成を設定し直しましたか?
おそらくパラメータ無しの時点で設定したままになっているため、Select操作で使用するメソッドがTableAdapter.GetData()のままになっていると思われます。
これを改めてTableAdapter.GetData(int p1)に設定しなおしてやる必要があります。(引数のデータ型はパラメータの型による)
そうするとパラメータ定義画面が出てくるのでパラメータに入れる値を設定してやります。#ASP.netは全然つかってないのでWinFormとは勝手が違うなぁ
個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)
- 回答としてマーク aquq 2012年9月6日 13:10
-
参考資料は読んでいませんが、質問にアップされていた画像のエラーメッ
セージからエラーの原因は推定できますので、とりあえずそれを書いてお
きます。エラーメッセージの意味は「引数なしの GetData メソッドを探したが見つ
からなかった」ということです。ご自分の ObjectDataSource1 のソースを見てください。
ObjectDataSource1 は、TypeName プロパティに指定された TableAdapter
クラスに、SelectMethod プロパティに指定された名前のメソッド(今回の
場合 GetData)を探しに行きます。画像からは、そのあたりの設定は正し
くされているように見えます。しかし、SelectParameters が設定されてない(以下のページのコードを例
に取ると <selectparameters> ... </selectparameters> が存在しない)
のではないですか? その場合、ObjectDataSource1 は引数がないと判断し
て、引数なしの GetData メソッドを探しに行きます。ObjectDataSource.SelectParameters プロパティ
http://msdn.microsoft.com/ja-jp/library/system.web.ui.webcontrols.objectdatasource.selectparameters%28v=vs.100%29.aspx一方、ウィザードで型付 DataSet + TableAdapter を作ると、SELECT クエ
リに合わせて、TableAdapter には GetData(int p1) というシグネチャの
メソッドが自動生成されているはずです(TableAdapter のソースを確認し
てください)。TableAdapter には、引数なしの GetData メソッドは存在しないはずです。
存在しないので、見つからないというエラーになったと思われます。上記の推定が正しければ、SelectParameters を正しく設定すれば解決する
はずです。どのように設定するかは、p1 をどこから、どのタイミングで、
どのように取得するかによります。質問には、それらの情報が具体的に書
いてないので、回答者側ではどのように設定すればよいかは分かりません。- 回答としてマーク aquq 2012年9月6日 13:10
-
本件下記2件の対応でパラメーターを渡すことが一応出来ました。
●追加1
ObjectDataSourceタグ内に
「<selectparameters><asp:querystringparameter name="p1"defaultvalue="1" /></selectparameters>」
<selectparameters>を追加 </selectparameters><selectparameters>
●追加2
if (!Page.IsPostBack)
{
ReportParameter p = new ReportParameter("p1","1");
ReportViewer1.LocalReport.SetParameters(p);
}
を追加
ただし、パラメーターの値を変えたい場合に追加1側のdefaultvalueと追加2側の値(上記で言うコード3行目「"1"」の部分)を共に同じ数字に変えなければ結果が表示されず以下のようになりました。追加1側のdefaultvalueだけ値を変えても以下のようになりますし、追加2側の値を変えても以下のようになってしまいます。</selectparameters><selectparameters>defaultvalueのパラメーターごと消せば良いのかと試したのですが、それも結果に変化はありませんでした。 </selectparameters>
<selectparameters></selectparameters>
<selectparameters>defaultvalueによって入力された値はコードによって上書きされると思ったのですが上手くいきません。
もし</selectparameters><selectparameters>理由が分かればで構いませんので教えていただきたいと思います。</selectparameters>- 編集済み aquq 2012年9月12日 5:43 誤字修正
-
> defaultvalueによって入力された値はコードによって上書き
> されると思ったのですが上手くいきません。QueryStringParameter の使い方を理解して使っていますか?
クエリ文字列から p1 の値を渡さなければならないのですが、渡
されていないから defaultvalue="1" の 1 が GetData(int p1)
の p1 に渡されているのだと思います。(クエリ文字列の意味が分らなければ、ググるなどして調べてく
ださい)「追加2」のコードは関係なくて、これをコメントアウトしても
結果は変わらないのでは? コメントアウトして defaultvalue
を変えると、その値によって正しく選択された結果が表示されま
せんか?そうであれば、クエリ文字列で p1 を正しく渡せばうまくいくは
ずです。でも、実際は p1 はクエリ文字列で渡すのではないのでは?
先のレスで紹介したページでは QueryStringParameter が使われ
ていますが、他にも目的に応じていろいろあります。ParameterCollection クラス
http://msdn.microsoft.com/ja-jp/library/system.web.ui.webcontrols.parametercollection%28v=vs.90%29.aspx前のレスでも書きましたが、p1 をどこから、どのタイミングで、
どのように取得するか詳細を書いてください。それが分らないと
何をどのように使えばよいかの回答はできません。