2012-01-17 19 views
5

我知道我們可以將對象數據源綁定到RDLC。我試圖綁定一個對象就像如下:在RDLC中綁定具有嵌套列表對象的數據源

public class ContactReportData 
{ 
    public string ContactReportHeading{get;set;} 
    public string ContactReportSubHeading{get;set;} 
    public List<Contact> ContactDetails{get;set;} 
} 

public class Contact { 
    public string ContactName{get;set;} 
    public string ContactDesignation{get;set;} 
} 

雖然設置爲RDLC,它會發現一次只能有一個數據集,說ContactReportData(無接觸的列表)或聯繫人。我想這是因爲報告需要這樣做。

我想要的是在報告中顯示的數據: ContactReportHeading ContactReportSubHeading在通訊錄中的 表格形式 - 聯繫人姓名,名稱。

我本來可以把這個作爲靜態報告數據的細節,並且只綁定聯繫人列表,但是我擁有的是聯繫人報告列表,其中我面對問題。

+0

同樣的問題在這裏。我開始在主表中添加一個列表,但不知道如何綁定它。 OT:我希望你已經安裝了VS2010 SP1。這就是我在尋找答案時首先遇到的問題。 – 2012-01-19 07:16:35

回答

3

我解決了這個問題,將我的對象作爲一個匿名對象的平面列表進行重新編譯,該列表具有所有聯繫人的屬性以及父對象的附加屬性。然後在RDLC報告中添加一個表並綁定聯繫對象的屬性,然後將一個組添加到父屬性中。

摘要用於製作您需要添加分組的佈局。

+1

你能否進一步解釋如何在RDLC上重複列表? 我已經嘗試過,它不呈現值。加入分組意味着什麼? – iberodev 2015-06-09 04:15:29

0

這可能不是一個合適的答案,但是當我覺得在這個問題上缺乏材料時,我會發布我的發現。

讓我們說如果我有父對象內的子對象的嵌套列表。例如,這是一種非常普遍的情況,如果您有一個訂單對象(父),您可能會有一個訂單項目列表(子項),您如何使用rdlc顯示所有信息?有兩種方式,1使用子報表,2使用分組。我意識到他們都可以實現同樣的事情,即在報告中顯示詳細信息列表。

public class Order{ 
    public int OrderID {get; set;} 
    public string Descrpition {get; set;} 
    public List<OrderItem> OrderItems {get; set;} 
} 
public class OrderItem{ 
    public int OrderItemID {get; set;} 
    public decimal Price{get; set;} 
} 

最簡單的方法是使用分組。通過分組,您必須創建一個新的數據類型,其中包含父級和子級的屬性。我相信這種方式也適用於多級嵌套的對象列表。這聽起來很愚蠢,但大多數時候,你無論如何都要創建一個新的數據類型,因爲你需要在報表中顯示的類型從業務對象是不同的:

public class OrderReport{ 
    public int OrderID {get; set;} 
    public string Description {get; set;} 
    public int OrderItemID {get; set;} 
    public decimal Price {get; set;} 
} 

然後在RDLC,你就必須要創建父行組和子行組,父應按OrderID分組,應將子行組設置爲「顯示詳細信息」。我想你可以多次執行此操作來實現對象的多級嵌套列表。

+0

聽起來很愚蠢。 ¿如果我們有多層嵌套,該怎麼辦?壓平這些對象效率極低,很難完成 – JavierIEH 2015-04-23 12:00:49

1

你真的不必平坦你的對象。相反,您可以綁定多個數據集進行報告。然後,您可以通過代碼將多個報告數據源分配給您的報告。這裏是工作示例:

List<Loan> loans = new List<Loan>(); 
loans.Add(GetLoanByLoanNumber(loanNumber)); 

LocalReport report = new LocalReport(); 
report.ReportPath = HostingEnvironment.MapPath("~/bin/Report/Receipt.rdlc"); 

ReportDataSource loanDetailsDataSource = new ReportDataSource(); 
loanDetailsDataSource.Name = "LoanDataSet"; //This refers to the dataset name in the RDLC file 
loanDetailsDataSource.Value = loans; 
report.DataSources.Add(loanDetailsDataSource); 

ReportDataSource loanItemsDataSource = new ReportDataSource(); 
loanItemsDataSource.Name = "LoanItemsDataSet"; 
loanItemsDataSource.Value = loans[0].loanItems; 
report.DataSources.Add(loanItemsDataSource); 

ReportDataSource principalPaymentDataSource = new ReportDataSource(); 
principalPaymentDataSource.Name = "PrincipalPaymentDataSet"; 
principalPaymentDataSource.Value = loans[0].principalPayments; 
report.DataSources.Add(principalPaymentDataSource); 

ReportDataSource interestPaymentDataSource = new ReportDataSource(); 
interestPaymentDataSource.Name = "InterestPaymentDataSet"; 
interestPaymentDataSource.Value = loans[0].interestPayments; 
report.DataSources.Add(interestPaymentDataSource); 

希望這會幫助別人!

0

@Bharath說得很對,你可以指定一個以上的數據源,並且該答案中的代碼包括將數據分配給報告。

如果要創建通過設計師的報告intially,然後有針對報告兩個數據源看起來是這樣的:

RDLC Report Designer with two DataSets

要獲得第二個數據集,右鍵點擊該文件夾數據集樹並選擇'添加數據集'。

然後,您可以在報告中使用兩個數據集中的字段;在上面的屏幕截圖中,TextBoxes鏈接到DataSet1,表格從DataSet2中填充。