ก่อนอื่นเลยสิ่งที่จำเป็นก็คือ เราต้องสร้าง 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