GetData1()
SELECT LastName, BirthDate FROM EmployeesGetData2()
WITH EmptyRowNum AS ( SELECT ROW_NUMBER() OVER( ORDER BY CustomerID) AS 'Num' FROM Customers ) SELECT ISNULL(LastName,'') LastName , ISNULL(BirthDate,'') BirthDate FROM Employees right outer join ( SELECT Num FROM EmptyRowNum WHERE Num <= 12 ) TT on EmployeeID = TT.Num
RDLC報表設計畫面如下(請將BorderStyle設定為Solid以畫出格線)
當使用GetData1()的方法將資料匯入RDLC中後,其結果如下
而使用GetData2()的方法將資料匯入RDLC中後,結果如下
由GetData2()的方法可以以SQL輕鬆的達到我們的需求。
在上一篇文章說到當我們只知道使用GetData1()的方法時,還可以使用另一種寫程式的方式來解決,其方法如下
NorthwndTableAdapters.Employees1TableAdapter adapter = new NorthwndTableAdapters.Employees1TableAdapter(); Northwnd.Employees1DataTable employee = adapter.GetData1(); for (int i = employee.Count; i < 12; i++) { Northwnd.Employees1Row row = employee.NewEmployees1Row(); row.LastName = ""; row.BirthDate = DateTime.Parse("1901/01/01"); employee.AddEmployees1Row(row); } ReportDataSource rds = new ReportDataSource(); rds.Name = "Northwnd_Employees1"; rds.Value = employee; ReportViewer1.LocalReport.DataSources.Add(rds);
其結果如下
請注意BirthDate最後三筆時間為 1901/1/1,此為我們使用撰寫程式的方式,新增的空資料。
當然這並不是我們所要的結果,如果資料型態是DateTime的時候,資料來源就一定需要有預設值,我們可以再設計RDLC的時候,使用運算式的方式(之後如果有機會再來介紹)來將其隱藏
BirthDate欄位的運算式
修改之後的結果如下
結論:
不管使用哪種方法,只要可以解決問題就是好方法,這裡特別感謝pinnywu的協助,提供第一種方式,讓我認知到SQL如果夠強的話,前端的程式真的可以少寫很多,建議各位在寫應用程式的人,有空多學習SQL,畢竟不管前端應用程式怎麼改,後端都還是要接資料庫,所以把SQL學好,對於寫程式幫助是很大的。
沒有留言:
張貼留言