将多个参数从Custom WebPart传递到Reporting Services Report Viewer webpart

cit*_*gov 4 sharepoint web-parts reporting-services

我在Sharepoint模式下使用Reporting服务,我能够在Sql Server Reporting Services报表查看器中显示报表,报表有多个参数,我的问题是如何将自定义Web部件中的多个参数传递给此报表.

我可以通过在自定义webpart中实现ITransformableFilterValues接口来传递一个参数,我想要做的是传递多个参数.

例如:如果报告中有2个参数,那么我应该能够从webpart中的控件中映射每个参数.

cit*_*gov 6

这是自定义Webpart的代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using aspnetwebparts = System.Web.UI.WebControls.WebParts;
//using Microsoft.Office.Server.Utilities;
using wsswebparts = Microsoft.SharePoint.WebPartPages;
//using Microsoft.SharePoint.Portal.WebControls;
using System.Collections.ObjectModel;
using Microsoft.SharePoint.Utilities;
using System.Data;
using System.Collections;

namespace CustomWebPart
{
    /// <summary>
    /// Used to provide filter values for the status report.
    /// </summary>
    public class StatusReportFiler : aspnetwebparts.WebPart, wsswebparts.ITransformableFilterValues
    {
        DropDownList ddlCategory;
        ListItem lstItem;
        Label lblCaption; 

        public virtual bool AllowMultipleValues
        {
            get
            {
                return false;
            }
        }
        public virtual bool AllowAllValue
        {
            get
            {
                return true;
            }
        }

        public virtual bool AllowEmptyValue
        {
            get
            {
                return false;
            }
        }
        public virtual string ParameterName
        {
            get
            {
                return "Category";
            }
        }



        public virtual ReadOnlyCollection<string> ParameterValues
        {
            get
            {
                string[] values = this.GetCurrentlySelectedCategory();
                return values == null ?
                    null :
                    new ReadOnlyCollection<string>(values);
            }
        }


        protected override void CreateChildControls()
        {


            lblCaption = new Label();
            lblCaption.Text = "&nbsp; Category:&nbsp;";

            Controls.Add(lblCaption);

            ddlCategory = new DropDownList();
            ddlCategory.AutoPostBack = true;

            lstItem = new ListItem();
            lstItem.Text = "Select All Category";
            lstItem.Value = "0";
            ddlCategory.Items.Add(lstItem);
            lstItem = null;


            lstItem = new ListItem();
            lstItem.Text = "BING";
            lstItem.Value = "Bing";
            ddlCategory.Items.Add(lstItem);
            lstItem = null;

            lstItem = new ListItem();
            lstItem.Text = "Google";
            lstItem.Value = "Google";
            ddlCategory.Items.Add(lstItem);
            lstItem = null;


            Controls.Add(ddlCategory);



           // base.CreateChildControls();
        }


        [aspnetwebparts.ConnectionProvider("Category Filter", "ITransformableFilterValues", AllowsMultipleConnections = true)]
        public wsswebparts.ITransformableFilterValues SetConnectionInterface()
        {
            return this;
        }
        protected override void OnPreRender(EventArgs e)
        {
            base.OnPreRender(e);
        }

        public string[] GetCurrentlySelectedCategory()
        {
            string[] selCategory = new string[1];
            selCategory[0] = ddlCategory.SelectedValue;
            return selCategory;
        }

        protected override void RenderContents(HtmlTextWriter htmlWriter)
        {


            /*htmlWriter.Write("<table border=\"0\" width=\"100%\">");
            htmlWriter.Write("<tr><td>");
            lblCaption.RenderControl(htmlWriter);
            htmlWriter.Write("</td></tr>");
            htmlWriter.Write("<tr><td>");
            lblCaption.RenderControl(htmlWriter);
            htmlWriter.Write("</td></tr>");
            htmlWriter.Write("</table>");*/

            this.EnsureChildControls();
            RenderChildren(htmlWriter);

        }

    }
}
Run Code Online (Sandbox Code Playgroud)
  1. 构建此Webpart后,将其部署到SharePoint.在Sharpoint中创建Webpart页面,将自定义Web部件添加到页面.添加后,您将能够在Webpart上看到包含值的下拉列表.

  2. 在另一种添加的WebPart部分添加SQL Server报告服务队的ReportViewer Web部件,并设置在属性部分的报告网址,然后点击应用,这份报告应该具有相同的参数名称,如自定义的WebPart.

  3. 在自定义的WebPart点击编辑 - >连接 - >发送类别过滤器, - >的ReportViewer - AAAA(这是我猜的REPORTNAME).这将弹出与映射部分中的窗口,地图文件管理器类别对报告过滤参数,然后单击Finish.这会将Webpart中的值传递给Report.

希望这可以帮助.