Tuesday, January 24, 2012

Crystal Report - สร้างรายงานให้ user กำหนดเงื่อนไข Group ได้เอง (Dynamic Group By)

วันนี้เรามาดูเทคนิคของ Crystal Report อีกครั้งครับ (เนื่องจากดูใน Google Analytics เห็นคนชอบบทความเกี่ยวกับ Crystal Report เป็นพิเศษ) คราวนี้เราจะมาสร้างรายงานที่สามารถให้ user กำหนด Group By ได้เองตามใจ Blog นี้จะทำแค่ Group by 1 ระดับให้ดู แต่เราสามารถประยุกต์ใช้ให้ user เลือก group ได้มากกว่า 1 ระดับ รวมถึงสามารถกำหนดเงื่อนไข sort by ได้ด้วย

ก่อนอื่นเลยสิ่งที่จำเป็นก็คือ เราต้องสร้าง Parameter Field ขึ้นมาก่อน เพื่อรับค่า parameter จาก user ว่าต้องการให้ group by column ไหนของข้อมูลครับ จากตัวอย่างผมสร้าง Parameter Field ชื่อ pGroupBy




จากนั้นก็สร้าง Formula Field เพื่อนำค่าที่ได้จาก Parameter Field มาคำนวนหา column ที่ต้องการ group ครับ
ในตัวอย่างผมสร้าง Formula Field ชื่อ GroupBy



จากโค้ดใน Formula Editor ผมใช้ IF THEN ELSE ซ้อนกัน (ที่จริงน่าใช้ Switch Case แต่ผมขี้เกียจแก้แล้ว) สังเกตุว่าถ้า user ส่ง parameter มาเป็น Dept ผมจะให้ Group By Formula Field อีกที นอกนั้นก็จะ Group By Database Field ตามปกติครับ

คราวนี้มาดูหน้าเวบกันบ้างครับ ผมก็สร้าง Drop-down List มา 1 ตัว ชื่อ ddlGroupBy และใส่ List ที่ต้องการไว้

1
2
3
4
5
6
7
8
</asp:DropDownList ID="ddlGroupBy" runat="server" style="position:absolute;left:100px;top:10px" CssClass="txtOptional"  Width="110px" EnableTheming="False" EnableViewState="False" >
     </asp:ListItem Text="Client" Value="Client" Selected="True"></asp:ListItem>
     </asp:ListItem Text="Most Work Lawyer" Value="MostWorkLawyer"></asp:ListItem>
     </asp:ListItem Text="Resp. Lawyer" Value = "RespStaff"></asp:ListItem>
     </asp:ListItem Text="Department" Value="Dept" ></asp:ListItem>
</asp:DropDownList>


ตอนสร้างรายงานก็อย่าลืม SetParameterValue ด้วยครับ

1
2
3
4
5
6
7
Dim reportDoc As New ReportDocument
reportDoc.FileName = Server.MapPath("~/Reports/AR/rptAgingReport.rpt")
reportDoc.SetDataSource(ARReportResults)
reportDoc.SetParameterValue("pGroupBy", ddlGroupBy.SelectedValue)
reportDoc.SetParameterValue("AsOfDate", asOfDate)


เท่านี้ก็เรียบร้อยแล้วครับ ทีนี้ user ก็สามารถเลือก column ที่ต้องการ Group By ได้ตามใจครับ



ref : http://jnithi.blogspot.com/2010/02/crystal-report-user-group-dynamic-group.html

No comments:

Post a Comment