2009-08-10 4 views
3

SQLレポートサービスのレポートボックスの上部には、小さな検索ボックスがあります。使用されると、検索テキストが検索され、ページを含むページに移動し、ページ上のテキストを強調表示します。私の質問は、レポートが読み込まれたときにどうすればいいのですか?Sqlレポートサービス - レポート内のアイテムを検索する - 負荷時

現在、私は自分のページに埋め込まれたレポートビューアを持っています。見つけ出す方法はありますか?私は2008年エクスプレスとドットネット2を使用しています

たとえば、シリアル番号1234をレポートに送信すると、ユーザーがテキストを検索してレポートに表示されるようになります。


エドは私にURL部分の答えをくれました。 http://server/Reportserver?/SampleReports/Product Catalog&rc:FindString=mystringしかし、私はまだreportviewerを把握することはできません。事前に

using Microsoft.Reporting.WebForms; 

protected void Page_Load(object sender, EventArgs e) 

{ 
    if (!Page.IsPostBack) 
    { 
     Int32 iID = Convert.ToInt32(Request.QueryString["ID"]); 
     String reportsPath = ConfigurationManager.AppSettings["ReportsPath"]; 
     String sReportName = "ReportInvoice"; 

     reportViewer1.Reset(); 
     reportViewer1.ProcessingMode = ProcessingMode.Remote; 
     reportViewer1.ShowParameterPrompts = false; 
     reportViewer1.ServerReport.ReportServerUrl = new Uri(ConfigurationManager.AppSettings["ReportViewerUrl"]); 
     reportViewer1.ServerReport.ReportServerCredentials = new ReportServerCredentials();//http://localhost/reportserver 
     reportViewer1.AsyncRendering = false; 
     ReportParameter[] reportParams = new ReportParameter[1]; 
     reportViewer1.ServerReport.ReportPath = reportsPath + sReportName; 
     reportParams[0] = new ReportParameter("invoiceID", iID.ToString()); 
     reportViewer1.ServerReport.Refresh(); 
    } 
} 

ありがとう:ここ


は、ページのコードの一部です。

答えて

2

this MSDN pageを参照してください(SQL 2005バージョン、2008年は同じですが、私は信じています)。

0

は、その背景の式を使用してレポート内のテキストボックスを持っているようなものに設定します。

=iif(me.value = Parameters!Highlight.value, "Yellow", "White") 

そしてもちろんのを、ハイライトと呼ばれるパラメータを作ります。 ;)

ロブ

+0

これは非常に興味深い解決策です。それは多くの状況で機能します。私の特別なプロラムは25ページのレポートです。アイテムは15ページにある可能性があります。もし私がページにもジャンプすることができれば(findのように)完璧になるでしょう。 – Praesagus

+0

ReportViewerコントロールにFindString(Refreshコマンドの直後に呼び出すメソッド、または事前に設定できるプロパティ)を提供するメンバーがあると思いました。 –

1

あなたが背後にあるコードの形でこれを実行しようとしているなら、あなたは、レポートビューアのオブジェクトを検索し、検索を実装RenderingCompleteにイベントを追加する必要があるので、このような何か:

public Report() 
{ 
    InitializeComponent(); 


    rpViewer.RenderingComplete += new RenderingCompleteEventHandler(rpViewer_RenderingComplete); 

} 

void rpViewer_RenderingComplete(object sender, RenderingCompleteEventArgs e) 
{ 
    int x = rpViewer.Find("0", 1); 
} 

EDIT:このWebページでは、あなたがWinFormsのコントロールを使用することはできませんので、

ので、しかし、私はklabrancheを使用していたJavascriptを使用して少しハッキングされたバージョンをアップ配線することができました。あなたがに検索テキストを追加しない場合

private void SearchReport(ReportViewer rv, string SearchText) 
{ 
    TextBox txt = (TextBox)rv.Controls[1].Controls[4].Controls[0]; 
    txt.Text = SearchText; 
    this.Body.Attributes.Add("onload", "javascript:document.getElementById('" + rv.ClientID + 
     "').ClientController.ActionHandler('Search', '" + SearchText + "');"); 
} 

:ここ

は、あなたがしたい検索テキストのレポートを検索するには、HTMLのボディにJavaScript関数を追加して、クラスの背後にあるコードですテキストボックスに入力すると、レポートのテキストボックスに検索文字列が表示されません。これは1つのレポートでのみ機能するので、追加のレポートがあればこれを変更する必要があります。

<body id="Body" runat="server"> 
+0

レポートビューアオブジェクトに「検索」メソッドがないようです。 Microsoft.Reporting.WebForms参照以上のものが必要ですか? – Praesagus

+0

findメソッドはMicrosoft.Reporting.WinFormsにありますので、これは動作しません。どのようにレポートを表示していますか?それはウェブページ上にありますか?コードはどのように見えますか? – Noah

+0

私は質問にコードを追加しました。 Microsoft.Reporting.WinFormsへの参照を設定するにはどうすればよいですか? – Praesagus

2

は、私は、Webベースのレポートビューア上のMSDNの記事の多くを読んで、検索をオフに発射するいくつかの方法を試してみましたが、唯一のが見つかりました:また、このためにあなたがあなたのhtmlのbodyタグを変更する必要が動作するように動作するように、この1:

まず、コード内であなたがそうのような検索テキストボックスを設定することができます。

TextBox txt; 
    txt = (TextBox) this.ReportViewer1.Controls[1].Controls[4].Controls[0];   
    txt.Text = "test"; 

は私がレポートビューアーのPreRenderイベントでそれをやりました。最初のコントロールリストの位置1はツールバーコントロール、#4は検索グループコントロール、そしてそのグループの最初のコントロールはテキストボックスです。 2番目の数字(4)は、あなたが表示している/ツールバーに表示していないものに基づいて変わる可能性があります。私はデフォルトのレポートビューアの設定で作業していました。それはハックだが動作する。

は、その後、私は、検索イベントを自分でオフに発砲しようとしたが、これは、イベントオフし、正しい情報を使用して火をしましたが、作業の検索にはなりませんでした....

だからここに私がやったことです。

私はjavascript関数作成:

<script type="text/javascript"> 
    function OnFirstLoad() { 
     if (!isPostBack) 
      document.getElementById('ReportViewer1').ClientController.ActionHandler('Search', document.getElementById('ReportViewer1_ctl01_ctl04_ctl00').value); 
    } 
</script> 

を私は.aspxページのソースを読んで、テキストは「検索」発見し、クライアント側のコールが何であったかを考え出しました。 ctl01 & ctl04とctl00がサーバーサイドコードと同じ番号付けに従っていることに気付くでしょう。これを変更してコードを反映させる必要があります。もう1つは、ツールバーの設定に応じて変更される可能性の高いものです(ctl04)。

私は、javascript関数へページの本文用のonloadイベントを設定します。

<body onload="OnFirstLoad();"> 

最後のトリックは、このコードを最初に呼び出すことでした。したがって、これをフォームコードのページロードイベントに追加しました。

If (!IsPostBack) 
    ClientScript.RegisterClientScriptBlock(GetType(), "IsPostBack", "var isPostBack = false;", true); 
else 
    ClientScript.RegisterClientScriptBlock(GetType(), "IsPostBack", "var isPostBack = true;", true); 

これは、javascript関数がチェックする変数を作成します。最初のラウンドでは、それは偽であるため、レポート視聴者検索機能を呼び出します。それ以外の場合は、それは真実であり、起動しません。

これは私の意見では壊れやすいハックです。レポートビューアのツールバー設定を変更すると、テキストボックスを設定するためにJavaScriptとコードが変更されることがあります。

私はいくつかのページを持つレポートを作成し、最初のヒットは3ページ目まででなく、すぐにそれに行きました。そこから、次のボタンはレポートの最後までうまくいった。

悪いことに、Windowsベースのレポートビューアやサーバーベースのレポートビューアほど簡単ではありません。 :)

幸運!

+0

私はこれを試します、ありがとうございます。 Stackoverflowは自動的にエドの答えを受け入れる前に私は賞金のためにあなたのことを見ていました... grrr。 – Praesagus

関連する問題