2015-10-20 21 views
1

我有一張銷售數據表,需要使用VS2010報表查看器生成報表。我可以按月進行基本分組,但需要插入包含無活動月份的記錄。輸入表是:空月份總計VS2010報表查看器

Input table

報告應顯示是這樣的:

Month    Sales 
Jan     1303 
Feb     250 
Mar     0 
Apr     500 

任何建議或推薦的文章,將不勝感激..

羅布

+0

當您嘗試將0銷售額插入March時,會出現什麼錯誤? – Roger

+0

填充表的系統不記錄任何活動。所顯示的例子是一個大型系統的樣本/演示,但是概念是,在銷售物品時,它們被輸入到表格中。即使沒有記錄的活動,報告也需要顯示每月的總計。 –

回答

0

你可以在使用它們作爲ReportDataSource之前,在VS2010中處理數據。

Dim dtTest As New DataTable 
dtTest.Columns.Add(New DataColumn("Date", GetType(System.DateTime))) 
dtTest.Columns.Add(New DataColumn("Item", GetType(System.String))) 
dtTest.Columns.Add(New DataColumn("Value", GetType(System.Double))) 

dtTest.Rows.Add(New DateTime(2015, 1, 13), "item1", 1200) 
dtTest.Rows.Add(New DateTime(2015, 1, 20), "item1", 103) 
dtTest.Rows.Add(New DateTime(2015, 2, 9), "item1", 250) 
dtTest.Rows.Add(New DateTime(2015, 4, 2), "item1", 500) 
dtTest.Rows.Add(New DateTime(2015, 1, 5), "item2", 100) 
dtTest.Rows.Add(New DateTime(2015, 1, 30), "item2", 10) 
dtTest.Rows.Add(New DateTime(2015, 2, 3), "item2", 20) 
dtTest.Rows.Add(New DateTime(2015, 3, 7), "item2", 50) 

'report data source 
Dim dtReportDataSource As New DataTable 

Dim dcYear As New DataColumn("Year", GetType(System.Int32)) 
Dim dcMonth As New DataColumn("Month", GetType(System.Double)) 
Dim dcItem As New DataColumn("Item", GetType(System.String)) 
Dim dcSum As New DataColumn("Sum", GetType(System.Double)) 

dtReportDataSource.Columns.Add(dcYear) 
dtReportDataSource.Columns.Add(dcMonth) 
dtReportDataSource.Columns.Add(dcItem) 
dtReportDataSource.Columns.Add(dcSum) 

dtReportDataSource.Columns("Sum").DefaultValue = 0 
dtReportDataSource.PrimaryKey = New DataColumn() {dcYear, dcMonth, dcItem} 

Dim dtStartDate As DateTime = CDate(dtTest.Select("", "Date")(0)("Date")) 
Dim dtEndDate As DateTime = CDate(dtTest.Select("", "Date DESC")(0)("Date")) 

For i As Integer = 0 To DateDiff(DateInterval.Month, dtStartDate, dtEndDate) 

    Dim intYear As Integer = DateAdd(DateInterval.Month, i, dtStartDate).Year 
    Dim intMonth As Integer = DateAdd(DateInterval.Month, i, dtStartDate).Month 

    For Each drTest As DataRow In New DataView(dtTest).ToTable(True, "Item").Rows 
     dtReportDataSource.Rows.Add(intYear, intMonth, drTest("Item")) 
    Next drTest 

Next i 

For Each drTest As DataRow In dtTest.Rows 

    Dim drReportDataSource As DataRow = dtReportDataSource.Rows.Find(New Object() {CDate(drTest("Date")).Year, CDate(drTest("Date")).Month, drTest("Item")}) 

    If Not IsNothing(drReportDataSource) Then drReportDataSource("Sum") += drTest("Value") 

Next drTest 

YouReportViewer.LocalReport.DataSources.Add(New ReportDataSource("Test", dtReportDataSource))