2010-04-01 45 views
4

我在Sharepoint模式下使用报表服务,我能够在Sql Server Reporting Services报表viwer中显示报表,我的问题是如何执行我将更多的一个参数从custome web部件传递给此报告。将多个参数从Custome WebPart传递到Reporting Services报表查看器webpart

我能够通过在自定义Web部件中实现ITransformableFilterValues接口来传递一个参数,我想要做的就是传递多个参数。例如:如果报告中有两个参数,那么我应该能够从webpart中的控件映射每个参数。

任何帮助或指导表示赞赏。

回答

1

我不确定SharePoint集成模式,但ReportServer正确接受通过URL字符串传递的参数。

+0

如果您有SharePoint Enterprise版本,还可以使用QueryString筛选Web部件来获取QueryString参数并将它们传递给SSRS Web部件。或者你可以实现一个自定义的QueryString FIlter Web部件。 – 2014-03-03 12:59:39

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); 

     } 

    } 
} 
  1. 一旦你建立这样的WebPart其部署到SharePoint。 在Sharpoint中创建Web部件页面,将自定义Web部件添加到该页面。 添加完后,您将能够在Webpart上看到包含值的下拉列表。

  2. 在另一个添加Web部分添加一个Sql Server报告服务ReportViewer Web部件并在属性部分设置报告URL并单击应用,该报告应该具有与自定义Web部件中相同的参数名称。

  3. 在自定义Web部件中,单击编辑 - >连接 - >将类别过滤器发送到 - > ReportViewer - AAAA(这是我猜测的ReportName)。这将弹出一个带有映射部分的窗口,在Report上映射Filer Category到Filtered参数,然后单击Finish。这会将Web部件的值传递给报告。

希望这会有所帮助。

相关问题