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傳遞給我的數據源類,並且所有事情都與世界一致。我想知道爲什麼沒有更多的文檔。