Kiến thức

[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.

Bạn đang xem: [DEVEXPRESS] Hướng dẫn sử dụng Mail Merge trong Rich Edit Control 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:

sử dụng mail merge

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:

DOWNLOAD SOURCE

Tags:

richtextbox

mail merge

Chuyên mục: Kiến thức

Related Articles

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Check Also
Close
Back to top button