quang cao hosting

Hướng dẫn tạo Report động trong VB.NET

Xem: 4228    Tải: 0   Thảo luận: 0   Mục: Visual studio & .NET   Lĩnh vực: Khác

18 điểm   ( 7 đánh giá ) File đã được kiểm thử

 Hướng dẫn các bạn cách tạo report động, sử dụng Xtra Report trong Devexpress. Như các bạn đã biết, để thiết kế report mình thường tạo những report tĩnh, tất là dữ liệu thay đổi được còn các field name thì thường mình cố định. Vì thế, nó sẽ rất bất tiện, nếu ta thiết kế nhiều mẫu report cho mỗi người dùng.

Vd: Nhân viên A muốn có report hiện đầy đủ thông tin và preview ở trang đứng. Nhưng nhân viên B lại muốn hiển thị ít thông tin, chỉ hiển thị những thông tin cần thiết, và in trang nằm.

Thì mình phải thiết kế nhiều report cho mỗi người dùng khác nhau. Hay thiết kế report có template chung nhưng lại khác table name, thì mình cũng phải mất nhiều thời gian để thiết kế lại những report cho mỗi người cần sử dụng. Chính vì vậy, hôm nay, mình viết hướng dẫn này giúp các bạn thiết kế nhanh Report, cho người dùng có thể tùy biến cao.

Giao diện chương trình demo:

Bây giờ, mình bắt đầu code

1. Import thư viện vào

Imports System
Imports System.Data
Imports System.Drawing
Imports System.Text
Imports System.Windows.Forms
Imports DevExpress.XtraReports.UI
Imports System.Data.SqlClient
Imports DevExpress.XtraPrinting.Drawing
Imports DevExpress.XtraSplashScreen
Imports System.Threading

2. Viết các hàm kết nối và lấy database truy vấn

Dim con As New SqlConnection
   Public Sub Taoketnoi()
       Dim str As String = "Data Source=.;Initial Catalog=NORTHWND;Integrated Security=True"
       con.ConnectionString = str
       con.Open()
   End Sub
   Public Sub Dongketnoi()
       con.Close()
   End Sub
   Public Function LayDulieu(query As String) As DataSet
       Taoketnoi()
       Dim dt As New DataSet
       Dim da As New SqlDataAdapter
       da.SelectCommand = New SqlCommand(query, con)
       da.Fill(dt)
       Dongketnoi()
       Return dt
   End Function

3. Viết hàm tạo pageHeader, pageDetail, reportHeader và reportFooter

Public Sub InitBands(ByVal rep As XtraReport)
       ' Create bands
       Dim detail As New DetailBand()
       Dim pageHeader As New PageHeaderBand()
       Dim reportHeader As New ReportHeaderBand()
       Dim reportFooter As New ReportFooterBand()
       reportHeader.Height = 40
       detail.Height = 20
       reportFooter.Height = 380
       pageHeader.Height = 20
       ' Place the bands onto a report
       rep.Bands.AddRange(New DevExpress.XtraReports.UI.Band() {reportHeader, detail, pageHeader, reportFooter})
   End Sub

4. Viết hàm tạo XRTable trong xtraReport Devexpress

Public Sub InitDetailsBasedonXRTable(ByVal rep As XtraReport)
        Dim ds As DataSet = (CType(rep.DataSource, DataSet))
        Dim colCount As Integer = ds.Tables(0).Columns.Count
        Dim colWidth As Integer = (rep.PageWidth - (rep.Margins.Left + rep.Margins.Right)) / colCount
        rep.Margins = New System.Drawing.Printing.Margins(20, 20, 20, 20)
        Dim tieude As New XRLabel
        tieude.Text = txtTieude.Text
        tieude.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopCenter
        tieude.ForeColor = Color.Orange
        tieude.Font = New Font("Tahoma", 20, FontStyle.Bold, GraphicsUnit.Pixel)
        tieude.Width = Convert.ToInt32(rep.PageWidth - 50)
        ' Create a table to represent headers
        Dim tableHeader As New XRTable()
        tableHeader.Height = 40
        tableHeader.BackColor = Color.Gray
        tableHeader.ForeColor = Color.White
        tableHeader.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter
        tableHeader.Font = New Font("Tahoma", 12, FontStyle.Bold, GraphicsUnit.Pixel)
        tableHeader.Width = (rep.PageWidth - (rep.Margins.Left + rep.Margins.Right))
        tableHeader.Padding = New DevExpress.XtraPrinting.PaddingInfo(5, 5, 5, 5, 100.0F)
        Dim headerRow As New XRTableRow()
        headerRow.Width = tableHeader.Width
        tableHeader.Rows.Add(headerRow)
        tableHeader.BeginInit()
        ' Create a table to display data
        Dim tableDetail As New XRTable()
        tableDetail.Height = 20
        tableDetail.Width = (rep.PageWidth - (rep.Margins.Left + rep.Margins.Right))
        tableDetail.Font = New Font("Tahoma", 12, FontStyle.Regular, GraphicsUnit.Pixel)
        Dim detailRow As New XRTableRow()
        detailRow.Width = tableDetail.Width
        tableDetail.Rows.Add(detailRow)
        tableDetail.Padding = New DevExpress.XtraPrinting.PaddingInfo(5, 5, 5, 5, 100.0F)
        tableDetail.BeginInit()
        ' Create table cells, fill the header cells with text, bind the cells to data
        For i As Integer = 0 To colCount - 1
            Dim headerCell As New XRTableCell()
            headerCell.Text = ds.Tables(0).Columns(i).Caption
            Dim detailCell As New XRTableCell()
            detailCell.DataBindings.Add("Text", Nothing, ds.Tables(0).Columns(i).Caption)
            If i = 0 Then
                headerCell.Borders = DevExpress.XtraPrinting.BorderSide.Left Or DevExpress.XtraPrinting.BorderSide.Top Or DevExpress.XtraPrinting.BorderSide.Bottom
                detailCell.Borders = DevExpress.XtraPrinting.BorderSide.Left Or DevExpress.XtraPrinting.BorderSide.Top Or DevExpress.XtraPrinting.BorderSide.Bottom
            Else
                headerCell.Borders = DevExpress.XtraPrinting.BorderSide.All
                detailCell.Borders = DevExpress.XtraPrinting.BorderSide.All
            End If
            If i = 0 Then
                headerCell.Width = 50
                detailCell.Width = 50
                detailCell.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopCenter
            ElseIf i = 1 Then
                headerCell.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft
                headerCell.Width = 130
                detailCell.Width = 130
            ElseIf i = 2 Then
                headerCell.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft
                headerCell.Width = 70
                detailCell.Width = 70
            ElseIf i = 4 Then
                headerCell.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft
                headerCell.Width = 145
                detailCell.Width = 145
            Else
                headerCell.Width = colWidth
                detailCell.Width = colWidth
            End If
            detailCell.Borders = DevExpress.XtraPrinting.BorderSide.Bottom Or DevExpress.XtraPrinting.BorderSide.Left Or DevExpress.XtraPrinting.BorderSide.Right
 
            ' Place the cells into the corresponding tables
            headerRow.Cells.Add(headerCell)
            detailRow.Cells.Add(detailCell)
        Next i
        tableHeader.EndInit()
        tableDetail.EndInit()
        ' Place the table onto a report's Detail band
        rep.Bands(BandKind.ReportHeader).Controls.Add(tieude)
        rep.Bands(BandKind.PageHeader).Controls.Add(tableHeader)
        rep.Bands(BandKind.Detail).Controls.Add(tableDetail)
    End Sub

Ở các câu lệnh trên các bạn có thể chỉnh sửa để cấu hình height và width từng field name cho hợp lý, cũng như canh chỉnh margin, padding hay font chữ...

6. Viết hàm tạo Watermask dạng text

Sub SetTextWatermark(ps As XtraReport)
        ' Create the text watermark.
        Dim textWatermark As New Watermark()
 
        ' Set watermark options.
        textWatermark.Text = "HTTP://LAPTRINHVB.NET"
        textWatermark.TextDirection = DirectionMode.ForwardDiagonal
        textWatermark.Font = New Font(textWatermark.Font.FontFamily, 40)
        textWatermark.ForeColor = Color.DodgerBlue
        textWatermark.TextTransparency = 150
        textWatermark.ShowBehind = False
        textWatermark.PageRange = "1,3-5"
 
        ' Add the watermark to a document.
        ps.Watermark.CopyFrom(textWatermark)
    End Sub

7. Viết hàm tạo Watermask dạng hình ảnh (picture)

Public Sub SetPictureWatermark(ps As XtraReport)
        ' Create the picture watermark.
        Dim pictureWatermark As New Watermark()
 
        ' Set watermark options.
        pictureWatermark.Image = Bitmap.FromFile("logo.png")
        pictureWatermark.ImageAlign = ContentAlignment.MiddleCenter
        pictureWatermark.ImageTiling = False
        pictureWatermark.ImageViewMode = ImageViewMode.Zoom
        pictureWatermark.ImageTransparency = 150
        pictureWatermark.ShowBehind = True
        'pictureWatermark.PageRange = "2,4"
 
        ' Add the watermark to a document.
        ps.Watermark.CopyFrom(pictureWatermark)
    End Sub

8. Viết sự kiện cho nút tạo Dynamic Report theo câu truy vấn query và những lựa chọn page setup hay watermask ở dạng nào

Private Sub btnCreateReport_Click(sender As Object, e As EventArgs) Handles btnCreateReport.Click
        SplashScreenManager.ShowForm(Me, GetType(loading), True, True, False)
        ' Create XtraReport instance
        Dim rep As New XtraReport()
        If grpPagesetup.Text = 0 Then
            rep.PaperKind = System.Drawing.Printing.PaperKind.A4
        Else
            rep.PaperKind = System.Drawing.Printing.PaperKind.A4Rotated
        End If
        If grpWaterMark.Text = 0 Then
            SetTextWatermark(rep)
        Else
            SetPictureWatermark(rep)
        End If
 
        rep.DataSource = LayDulieu(txtQuery.Text)
        rep.DataMember = (CType(rep.DataSource, DataSet)).Tables(0).TableName
        InitBands(rep)
        InitDetailsBasedonXRTable(rep)
        rep.ShowRibbonPreviewDialog()
        SplashScreenManager.CloseForm(False)
    End Sub

Chúc các bạn thành công.

Hướng dẫn tạo Report động trong VB.NET

Hướng dẫn tạo Report động trong VB.NET Đăng ngày 19-08-2016  Hướng dẫn các bạn cách tạo report động, sử dụng Xtra Report trong Devexpress. Như các bạn đã biết, để thiết kế report mình thường tạo những report tĩnh, tất là dữ liệu thay đổi được còn các field name thì thường mình cố định. Vì thế, nó sẽ rất bất tiện, nếu ta thiết kế nhiều mẫu report cho mỗi người dùng. 2.5714285714286/10 4228

Thảo luận:

Để bình luận bạn phải đăng nhập thành viên.

File tương tự

Files cùng mục

 
File gợi ý cho bạn
File tải nhiều nhất
Megacode.vn - Thư viện mã nguồn chia sẻ, tải file cho cộng đồng
Copyright © 2013-2021. All rights reserved. Bản quyền thuộc VinaGon
Email: [email protected]
Hotline: 086.924.3838