0

コンボリスト パラメーターが渡されたときに [レポートの表示] ボタンをクリックしないと、レポート ビューアーのグラフが読み込まれません。

選択したすべてのパラメーターが正しく渡され、レポート ビューアーの [レポートの表示] ボタンをクリックした後にのみレポートが読み込まれます。ASP.NET ページにこのレポート ビューアーがあり、パラメーターは、ユーザーが入力パラメーターを入力して選択するパラメーター フォームを持つ別の ASP.NET ページから作成されたセッション変数を使用して渡されます。

入力パラメーターとして、日付 ​​(日付ピッカー) と会社名 (チェック ボックス付きの複数選択コンボ リスト) があります。

レポート パラメータが複数選択コンボ リストから取得されない限り、レポートは問題なく機能します。

レポート パラメーターをセッション変数として確立するために使用したコードを次に示します。

Session("labname") = Nothing
    Session("fractionid") = FractionDropDownList.SelectedValue
    For intloopindex As Integer = 0 To LabNamesCheckBoxList.Items.Count - 1
        If LabNamesCheckBoxList.Items(intloopindex).Selected Then
            Session("labname") &= LabNamesCheckBoxList.Items(intloopindex).Text & ControlChars.CrLf
        End If
    Next
    Session("sdate") = sdate.text
    Session("edate") = edate.text

これらのセッション変数をパラメーターとして reportviewer コントロールに渡すコードを次に示します。

IsPostBack でない場合

        Dim fractionparam As String
        Dim sdateparam As String
        Dim edateparam As String
        Dim regionparam As String
        Dim labnameparam As String

        regionparam = Session("regionid")
        fractionparam = Session("fractionid")
        labnameparam = Session("labname")
        sdateparam = Session("sdate")
        edateparam = Session("edate")


        Dim rp(3) As Microsoft.Reporting.WebForms.ReportParameter

        'rp(0) = New Microsoft.Reporting.WebForms.ReportParameter("regionid", regionparam)
        rp(0) = New Microsoft.Reporting.WebForms.ReportParameter("fractionid", fractionparam)
        rp(1) = New Microsoft.Reporting.WebForms.ReportParameter("labname", labnameparam)
        rp(2) = New Microsoft.Reporting.WebForms.ReportParameter("sdate", sdateparam)
        rp(3) = New Microsoft.Reporting.WebForms.ReportParameter("edate", edateparam)

        Me.ReportViewer1.ServerReport.SetParameters(rp)

    End If
4

1 に答える 1

0

私はついに解決策を得ました。

古いコードで 1 つの大きな間違いを犯していました。複数値パラメーターを使用して、コンボ ボックス リストから選択したすべての値を 1 つの文字列として送信しようとしていました。

しかし、文字列配列を使用して多値パラメーターを格納し、セッション変数を使用してそれらを送信する必要がありました。

以下のコードを含めました。

dim count as integer
For intloopindex As Integer = 0 To LabNamesCheckBoxList.Items.Count - 1
        If LabNamesCheckBoxList.Items(intloopindex).Selected Then
          count=count+1
        End If    
dim labnames(count) as array

dim j as integer
j=0

for i as integer=0 to labnamescheckboxlist.items.count-1
labnames(j)=labnamescheckboxlist.item(i).text
j=j+1
next

    Session("labname") = Nothing
    Session("labname")=labnames

    Session("fractionid") = FractionDropDownList.SelectedValue
    Session("sdate") = sdate.text
    Session("edate") = edate.text

ターゲット ページで、以前の投稿のコードに示されているように、すべてのセッション変数をパラメーターとして渡します。

于 2009-07-18T05:11:20.170 に答える