1

我已经使用MVC和MVC Report Viewer在VS2013中创建了一个SSRS报告。报表的数据源是有几个方法,返回不同类型的对象名单的一类:将参数传递给SSRS业务对象类数据源

public class ReportModel 
{ 
    //known branchId for test purposes 
    private static int branchId = 12345; 

    public List<Top5Record> GetTop5() 
    {   
     return (from s in context.Salesmen 
     where s.branchId == branchId 
     select new Top5Record 
     { 
     Name = tr.Name, 
     Sales = tr.Sales 
     }).ToList(); 
    } 
} 

现在我做测试,我需要它,因此branchId传递中作为参数,而不是硬编码。因为我不直接创建ReportModel类,所以我没有看到如何在构造函数中传递branchId ......除非有些事情我不知道。

我的报告的URL看起来像这样:

http://localhost/Branch/Report?branchId=1234 

所以我会非常想抓住从URL中branchId并把它传递给ReportModel类莫名其妙。这是可以做到的吗?

所有的信息(如this)目前为止,我发现SSRS参数似乎围绕在设计器级之后使用的参数从数据源中检索到数据。

如果我想实现的是不可能的,有没有人可以提出一些聪明的解决方法?我现在非常难过这一次。

回答

0

我能弄清楚我必须做什么才能将参数传递给我的方法。事实证明有一种原生的方式可以做到这一点,但我并不知道。首先,我不得不改变我的方法把参数:

public class ReportModel 
{ 

public List<Top5Record> GetTop5(int branchId) 
{   
    return (from s in context.Salesmen 
    where s.branchId == branchId 
    select new Top5Record 
    { 
    Name = tr.Name, 
    Sales = tr.Sales 
    }).ToList(); 
} 
} 

然后我不得不去在那里我有我的报表浏览器页面,并在设计模式打开它。我选择了我想要的ObjectDataSource,并在属性菜单中单击了数据部分下SelectParameters选项的省略号。从那里我点击“添加参数”,给它一个名称,并选择QueryString作为参数源。我还必须设置QueryStringField,在我的例子中是branchId。现在我可以将url queryString中的branchId传递给我的数据源类,并且所有事情都与世界一致。我想知道为什么没有更多的文档。