- [SQLSERVER] Loại bỏ Restricted User trên database MSSQL
- [C#] Hướng dẫn tạo mã QRcode Style trên winform
- [C#] Hướng dẫn sử dụng temp mail service api trên winform
- [C#] Hướng dẫn tạo mã thanh toán VietQR Pay không sử dụng API trên winform
- [C#] Hướng Dẫn Tạo Windows Service Đơn Giản Bằng Topshelf
- [C#] Chia sẻ source code đọc dữ liệu từ Google Sheet trên winform
- [C#] Chia sẻ source code tạo mã QR MOMO đa năng Winform
- [C#] Chia sẻ source code phần mềm lên lịch tự động chạy ứng dụng Scheduler Task Winform
- [Phần mềm] Tải và cài đặt phần mềm Sublime Text 4180 full version
- [C#] Hướng dẫn download file từ Minio Server Winform
- [C#] Hướng dẫn đăng nhập zalo login sử dụng API v4 trên winform
- [SOFTWARE] Phần mềm gởi tin nhắn Zalo Marketing Pro giá rẻ mềm nhất thị trường
- [C#] Việt hóa Text Button trên MessageBox Dialog Winform
- [DEVEXPRESS] Chia sẻ code các tạo report in nhiều hóa đơn trên XtraReport C#
- [POWER AUTOMATE] Hướng dẫn gởi tin nhắn zalo từ file Excel - No code
- [C#] Chia sẻ code lock và unlock user trong domain Window
- [DEVEXPRESS] Vẽ Biểu Đồ Stock Chứng Khoán - Công Cụ Thiết Yếu Cho Nhà Đầu Tư trên Winform
- [C#] Hướng dẫn bảo mật ứng dụng 2FA (Multi-factor Authentication) trên Winform
- [C#] Hướng dẫn convert HTML code sang PDF File trên NetCore 7 Winform
- [C#] Hướng dẫn viết ứng dụng chat với Gemini AI Google Winform
[DEVEXPRESS] Hướng dẫn sử dụng Mail Merge trong Rich Edit Control VB.NET
Bài viết hôm nay, mình xin hướng dẫn các bạn cách sử dụng Mail Merge trong Rich Edit Control của Devexpress bằng VB.NET.
Vậy Mail Merge là gì? Hướng dẫn sử dụng Mail Merge trong Devexpress VB.NET
Trộn thư (Mail Merge) là tính năng hữu ích trong Microsoft Word, tính năng này giúp các bạn giảm thiểu thời gian khi xử lý các dạng chèn danh sách vào một mẫu cố định như: thư mời, thông báo, thư cảm ơn, phiếu điểm…
Mặc dù tính năng này rất hữu ích nhưng có nhiều bạn chưa biết hoặc chưa để ý đến tính năng trộn thư này. Các bạn cùng tham khảo bài viết dưới đây để biết cách trộn thư trong Word 2017.
* Có nhiều bạn hỏi tại sao sử dụng Mail Merge, em thấy nó cũng giống tạo Report.
Với Mail merge thì người sử dụng cuối chỉ cần sửa thông tin file word, ví dụ: hợp đồng hay bảng lương thì có thể chạy. Còn nếu các bạn sử dụng Report thì cần phải can thiệp vào code mới chỉnh sửa được.
Giao diện Demo của ứng dụng:
Source code Mail Merge VB.NET ứng dụng:
Imports System.ComponentModel
Imports System.Text
Imports System.Data.SqlClient
Imports System.Collections
Imports DevExpress.XtraGrid.Views.Grid
Imports DevExpress.XtraRichEdit.API.Native
Imports DevExpress.XtraRichEdit
Imports DevExpress.Services
Imports MailMerge.ProgressIndicator
Partial Public Class Form1
Shared Sub New()
DevExpress.UserSkins.BonusSkins.Register()
DevExpress.Skins.SkinManager.EnableFormSkins()
End Sub
Public Sub New()
InitializeComponent()
End Sub
Dim con As New SqlConnection
Public Sub Taoketnoi()
Dim str As String = "server=192.168.0.3;Initial Catalog=HOB2016;User ID=sa; password=minh123"
con.ConnectionString = str
con.Open()
End Sub
Public Sub Dongketnoi()
con.Close()
End Sub
Public Function LayDulieu(sql As String) As DataTable
Taoketnoi()
Dim dt As New DataTable
Dim da As New SqlDataAdapter
da.SelectCommand = New SqlCommand(sql, con)
da.Fill(dt)
Dongketnoi()
Return dt
End Function
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim dt As DataTable = LayDulieu("select * from view_nhanvien")
GridControl1.DataSource = dt
lbl_manv.DataBindings.Clear()
lbl_manv.DataBindings.Add("Text", dt, "manv")
inputData.LoadDocument("certificate.doc", DocumentFormat.Doc)
End Sub
Private Sub lbl_manv_TextChanged(sender As Object, e As EventArgs) Handles lbl_manv.TextChanged
Label1.Text = lbl_manv.Text
End Sub
Private Sub btnprint_Click(sender As Object, e As EventArgs) Handles btnprint.Click
Dim dt As DataTable = LayDulieu("select TENNV, diachi1 as diachi from view_nhanvien where manv='" & lbl_manv.Text & "'")
inputData.Options.MailMerge.DataSource = dt
inputData.Options.MailMerge.ViewMergedData = True
'XEM MAIL MERGE
Dim myMergeOptions As MailMergeOptions = inputData.Document.CreateMailMergeOptions()
'myMergeOptions.FirstRecordIndex = 1
'myMergeOptions.LastRecordIndex = 10
myMergeOptions.MergeMode = MergeMode.NewSection
inputData.Document.MailMerge(myMergeOptions, inputData2.Document)
inputData2.ShowPrintPreview()
End Sub
Private Sub SimpleButton1_Click(sender As Object, e As EventArgs) Handles SimpleButton1.Click
Dim dt As DataTable = LayDulieu("select TENNV, diachi1 as diachi from view_nhanvien")
inputData.Options.MailMerge.DataSource = dt
inputData.Options.MailMerge.ViewMergedData = True
'XEM MAIL MERGE
Dim myMergeOptions As MailMergeOptions = inputData.Document.CreateMailMergeOptions()
'myMergeOptions.FirstRecordIndex = 1
'myMergeOptions.LastRecordIndex = 10
myMergeOptions.MergeMode = MergeMode.NewSection
inputData.Document.MailMerge(myMergeOptions, inputData2.Document)
inputData2.ShowPrintPreview()
End Sub
Private Sub inputData_MailMergeStarted(sender As Object, e As MailMergeStartedEventArgs) Handles inputData.MailMergeStarted
inputData.ReplaceService(Of IProgressIndicationService) _
(New MyProgressIndicatorService(inputData, Me.progressBarControl1))
End Sub
Private Sub inputData_MailMergeFinished(sender As Object, e As MailMergeFinishedEventArgs) Handles inputData.MailMergeFinished
inputData.RemoveService(GetType(IProgressIndicationService))
End Sub
Private Sub inputData_MailMergeRecordStarted(sender As Object, e As MailMergeRecordStartedEventArgs) Handles inputData.MailMergeRecordStarted
System.Threading.Thread.Sleep(100)
End Sub
Private Sub inputData_MailMergeRecordFinished(sender As Object, e As MailMergeRecordFinishedEventArgs) Handles inputData.MailMergeRecordFinished
'e.RecordDocument.AppendDocumentContent("Docsungalow.docx", DocumentFormat.OpenXml)
End Sub
Private Sub SimpleButton3_Click(sender As Object, e As EventArgs) Handles SimpleButton3.Click
' xuất file mail merge
Dim dt As DataTable = LayDulieu("select TENNV, diachi1 as diachi from view_nhanvien where manv='" & lbl_manv.Text & "'")
Dim myMergeOptions As MailMergeOptions = inputData.Document.CreateMailMergeOptions()
myMergeOptions.DataSource = dt
'myMergeOptions.FirstRecordIndex = 1
'myMergeOptions.LastRecordIndex = 3
myMergeOptions.MergeMode = MergeMode.NewSection
Dim fileDialog As New SaveFileDialog()
fileDialog.Filter = "MS Word 2007 documents (*.docx)|*.docx|All files (*.*)|*.*"
fileDialog.FilterIndex = 1
fileDialog.RestoreDirectory = True
Dim dialogResult_Renamed As DialogResult = fileDialog.ShowDialog()
If dialogResult_Renamed = System.Windows.Forms.DialogResult.OK Then
Dim fName As String = fileDialog.FileName
If fName <> "" Then
inputData.Document.MailMerge(myMergeOptions, fileDialog.FileName, DocumentFormat.OpenXml)
System.Diagnostics.Process.Start(fileDialog.FileName)
End If
End If
End Sub
End Class
- Tiếp là tạo thêm một class: MyProgressIndicator.vb, dùng để hiển thị phần trăm progress bar, nếu bạn chạy Mail merge nhiều dữ liệu.
Imports Microsoft.VisualBasic
Imports System
Imports System.Collections.Generic
Imports System.Text
Imports DevExpress.XtraEditors
Imports DevExpress.Services
Imports System.Windows.Forms
Imports System.Drawing
Namespace ProgressIndicator
#Region "#myprogressindicator"
Friend Class MyProgressIndicatorService
Implements IProgressIndicationService
Private _Indicator As ProgressBarControl
Public Property Indicator() As ProgressBarControl
Get
Return _Indicator
End Get
Set(ByVal value As ProgressBarControl)
_Indicator = value
End Set
End Property
Public Sub New(ByVal provider As IServiceProvider, ByVal indicator As ProgressBarControl)
_Indicator = indicator
End Sub
#Region "IProgressIndicationService Members"
Private Sub Begin(ByVal displayName As String, ByVal minProgress As Integer, ByVal maxProgress As Integer, ByVal currentProgress As Integer) Implements IProgressIndicationService.Begin
_Indicator.Properties.Minimum = minProgress
_Indicator.Properties.Maximum = maxProgress
_Indicator.Properties.ShowTitle = True
_Indicator.EditValue = currentProgress
_Indicator.Refresh()
_Indicator.Show()
End Sub
Private Sub [End]() Implements IProgressIndicationService.End
_Indicator.Refresh()
_Indicator.Hide()
End Sub
Private Sub SetProgress(ByVal currentProgress As Integer) Implements IProgressIndicationService.SetProgress
_Indicator.EditValue = currentProgress
_Indicator.Refresh()
End Sub
#End Region
End Class
#End Region ' #myprogressindicatorsindicator
End Namespace
VIDEO DEMO ỨNG DỤNG: