Showing posts with label Crystal Report. Show all posts
Showing posts with label Crystal Report. Show all posts

Monday, November 27, 2017

แก้ปัญหาไม่แสดงผลตามต้องการเหตุจากบางคอลัมน์ในสูตรเป็น NULL


  • ปัญหาที่พบคือบาง Record นั้น ColumnB ไม่มีข้อมูล (NULL) ทำให้สูตรที่มี ColumnB อยู่ด้วยเป็น NULL ตามไปด้วย แต่ที่ต้องการคือถ้า Record ไหนที่ ColumnB เป็น NULL ก็กำหนดค่าให้มีค่าเป็น 0 ซะ
  • แก้ปัญหาโดยใช้ IsNull มาช่วยเช่น
    • ถ้าเป็นคำสั่งใน SQL Server
      • SELECT YourColumn, ColumnA, ColumnB, IsNull(ColumnA,0)+IsNull(ColumnB,0) As SumAandB FROM YourTable
  • จะได้ผลตามที่ต้องการ
 
  • ถ้าเป็นใน Crystal Report ก็อาจต้องสร้าง Formula fields เพิ่มเช่น 
    • IF IsNull(ColumnB) THEN 0 ELSE ColumnB

Tuesday, April 22, 2014

การส่งพารามิเตอร์จาก VB.net 2005 ไป Crystal Report for .Net Framework 2.0

เคยทำ Report มาหลายโปรเจคแล้ว พอกลับมาทำ Report สำหรับโปรเจคใหม่ จะต้องมีการส่งพารามิเตอร์จาก VB.Net ไปยัง Crystal Report เขียนโค้ดยังไง ลืมอีกแล้ว (นี่ขนาดยังไม่แก่มากนะเนี่ย คงจะเริ่มแก่ทีละน้อย ๆ แล้ว อิอิ) ก็เลยเอาโค้ดมาไว้ที่นี่ เวลามีโปรเจคใหม่ ๆ จะได้เอาไปใช้ได้เลยดังนี้
  1. สร้างฟอร์มใหม่
  2. ลาก CrystalReportViewer มาใส่ไว้ในฟอร์มเฉย ๆ ไม่ต้องตั้งค่าอะไรเพิ่ม
  3. เขียนโค้ดประมาณนี้
Imports System.Data.SqlClient
Imports System.Data
Imports CrystalDecisions.Shared
Imports CrystalDecisions.CrystalReports.Engine
Public Class YourReportForm
    Private Sub ReportForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Me.Load
        Dim currentReport As New YourCrystalReport
        CrystalReportViewer1.ReportSource = currentReport
        currentReport.SetDatabaseLogon("DBUser", "DBPassword")
        Dim paramFields As New ParameterFields()
        Dim paramField As New ParameterField()
        Dim discreteVal As New ParameterDiscreteValue()
        paramField.ParameterFieldName = "YourParameterName"
        discreteVal.Value = "YourParameterValue"
        paramField.CurrentValues.Add(discreteVal)
        paramFields.Add(paramField)
        CrystalReportViewer1.ParameterFieldInfo = paramFields
        CrystalReportViewer1.Zoom(85)
    End Sub
End Class

Thursday, October 11, 2012

วิธีใช้ Crystal Report ใน ASP.Net

วิธีใช้ Crystal Report ใน ASP.Net

ใน Window App. ใช้ Crystal Report นั้นไม่ยาก
แต่ ใน Web App. ใช้ Crystal Report แล้วแต่ข้อมูลไม่ออกมาให้เห็น
จึงได้ทดลองค้นหาวิธีทำตั้งนานหลายชั่วโมง
จนกระทั่งทำได้สำเร็จได้ผลตามต้องการ
แต่นี่ยังไม่ใช่วิธีที่ดีที่สุด ก็ต้องทดลองใช้ดูแล้วค่อย ๆ พัฒนาหาวิธีการที่ดีกว่านี้
ในเบื้องต้นจะเอาตัวอย่างเท่าที่ทำได้ผลแล้วมาแสดงให้เห็นก่อนดังนี้
1.สร้าง Dataset ขึ้นมาสมมุติขื่อ Dataset1.xsd ในนี้มี DataTable ชื่อ DataTable1
2.สร้าง Crystal Report สมมุติชื่อ CR1.rpt
           - DataBase Expert > Project Data > ADO.NET Dataset > Dataset1
           - ทำตามขั้นตอนการสร้าง Crystal Report ทั่ว ๆ ไป
3.ใน Code-Behind เขียนคำสั่งดังนี้

Imports CrystalDecisions.Shared
Imports CrystalDecisions.CrystalReports.Engine
Imports System.Data.SqlClient

Partial Class DailyMeterList
 Inherits System.Web.UI.Page

 Dim R1 As New ReportDocument

 Protected Sub btnPreview_Click ...

  Dim xFile As String = Server.MapPath("CR1.rpt")
  R1.Load(xFile, OpenReportMethod.OpenReportByDefault)

  Dim objConn As New SqlConnection(YourConnectString)  
  Dim DA As SqlDataAdapter
  Dim ds As New DataSet
  Dim dt As DataTable
  Dim strCmd As String
  strCmd = "SELECT * FROM WorkTable  " 
  objConn.Open()
  DA = New SqlDataAdapter(strCmd, objConn)
  DA.Fill(ds, "DataTable1")
  dt = ds.Tables("DataTable1")

  R1.Database.Tables(0).SetDataSource(ds.Tables(0))
  V1.ReportSource = R1

 End Sub
End Class

'แต่เกิดปัญหาว่าเวลากด Next เพื่อดูหน้าต่อไปปรากฎว่า
'รายงานไม่แสดงผลเลยจึงแก้ด้วย Code ดังนี้

  Protected Sub Page_Load ...
  If Page.IsPostBack Then
     btnPreview_Click(sender, e)
  End If
 End Sub

Monday, January 9, 2012

Crystal Report ปรับระยะแนวตั้งให้สวยงามไม่ได้

Crystal Report ใน VB.net ปรับระยะแนวตั้งของข้อความให้สวยงามไม่ได้ มักจะกระโดดไปสูงเกินหรือต่ำเกิน

แก้โดย
1.ไปที่ Crystal Reports > Design > Default Settings...


2.ตั้ง Grid Size ให้เล็กลงเหลือประมาณ 0.05 ก็น่าจะใช้งานปรับระยะตัวอักษรใน Report ได้สวยงามตามต้องการ

Friday, October 21, 2011

วิธีส่งพารามิเตอร์จาก VB ไป Crystal Report แบบง่าย ๆ

Dim rpt As New rptName
rpt.SetParameterValue("pr1", txt1.Text)
rpt.SetParameterValue("pr2", txt2.Text)

CrystalReportViewer1.ReportSource = rpt
CrystalReportViewer1.Refresh()

Tuesday, August 9, 2011

Crystal Report : วิธีเลื่อนระยะทีละน้อย ๆ

ปัญหาเลื่อน Object ไปวางในตำแหน่งที่ต้องการไม่ได้
สาเหตุ ตั้ง Snap to grid เอาไว้
วิธีแก้ คลิกขวาบนพื้นที่ว่าง ไม่เลือก Snap to Grid



Thursday, June 9, 2011

วิธีส่งค่าตัวแปรจาก form ใน VB ไปยัง Crystal Report

 ในฟอร์ม

 Imports CrystalDecisions.Shared
pf1.Name = "DT1" 'ให้ตรงกับชื่อพารามิเตอร์ใน Crystal Report
pf2.Name = "DT2" 'ให้ตรงกับชื่อพารามิเตอร์ใน Crystal Report
pf3.Name = "sPlant" 'ให้ตรงกับชื่อพารามิเตอร์ใน Crystal Report
pdv1.Value = d1 'กำหนดค่าให้ตัวแปร pdv1
pdv2.Value = d2 'กำหนดค่าให้ตัวแปร pdv2
pdv3.Value = UcrlUnitTreeView1.SelectNodeText 'กำหนดค่าให้ตัวแปร pdv3
pf1.CurrentValues.Add(pdv1)
pf2.CurrentValues.Add(pdv2)
pf3.CurrentValues.Add(pdv3)
pfs.Add(pf1)
pfs.Add(pf2)
pfs.Add(pf3)
CrystalReportViewer1.ParameterFieldInfo = pfs
rpt.SetDataSource(dv)
CrystalReportViewer1.ReportSource = rpt
CrystalReportViewer1.Zoom(85)

 
 


Free TextEditor

คำนวณหาความแตกต่างระหว่างสอง DateTime ใน Crystal report

  • ใช้ฟังก์ชัน DateDiff("s",DateTime1,DateTime2) โดยที่ DateTime1 เกิดก่อน DateTime2
  • "s" คือ Interval Type มีการกำหนดรูปแบบดังนี้
Interval type  Description 
yyyy             Year
q                  Quarter
m                 Month
y                  Day of year
d                  Day (both "y" and "d" find the difference in days)
w                 Number of weeks between startDateTime and endDateTime
ww               Number of firstDayOfWeek's between startDateTime and endDateTime
h                 Hour
n                 Minute
s                 Second

Sunday, January 9, 2011

Crystal Report : Alignment


ต้องการ Alignement ทีละหลาย ๆ Object พร้อม ๆ กัน
ก็กด Shift ค้าง แล้วคลิกเลือก Object ที่ต้องการแล้ว
คลิกขวาเลือก Align > แล้วแต่จะเลือก
โดย Object ทั้งหมดมันจะ ถูก Align ให้เท่ากัน Object ตัวสุดท้ายที่คลิก