شاطر
اذهب الى الأسفل
عدد المساهمات : 134
تاريخ التسجيل : 08/10/2012
معاينة صفحة البيانات الشخصي للعضو

الدرس الثالث مع PrintDocument .. طباعة DataGrid

في الإثنين أكتوبر 15, 2012 9:42 am
فى هذا الدرس سنحاول طباعة بيانات من DataGrid مرتبطة بقواعد بيانات بحيث تكون البيانات المطبوعة على شكل جدول غير متساوى الاعمدة مع طباعة صف العنوان
يجب سحب الادوات التالية على الفورم أولا
1- DataGridView
2- PrintDocument
3- PrintPreviewDailog
4- Button (3)
5- label
تعريفات خاصة بعمليات الاتصال بقاعدة البيانات
Dim my_con As New OleDb.OleDbConnection
Dim my_com As New OleDb.OleDbCommand
Dim my_adp As New OleDb.OleDbDataAdapter
Dim my_ds As New DataSet

فى حدث load للـ form1
my_con.ConnectionString = "provider=microsoft.jet.oledb.4.0;data source=" & Application.StartupPath & "\employee.mdb"
my_adp.SelectCommand = my_com
فى حدث Click لـ button جلب البيانات والذى اسميناه btn_import_data
Try
my_ds.Tables.Remove("emp")
Catch ex As Exception

End Try
btn_prev.Enabled = True
btn_prnt.Enabled = True
my_com.Connection = my_con
my_com.CommandText = "select * from employee"
my_adp.Fill(my_ds, "emp")
dta_data.DataSource = my_ds.Tables("emp")
تسمية رؤوس اعمدة DataGridView
dta_data.Columns(0).HeaderText = "رقم"
dta_data.Columns(1).HeaderText = "اسم الموظف"
dta_data.Columns(2).HeaderText = "الوظيفة"
dta_data.Columns(3).HeaderText = "المرتب"
dta_data.Columns(4).HeaderText = "رقم الهاتف"

الاكواد التالية التالى فى حدث PrintPage لأداة prindocument والتى اسميناها prnt_doc

رقم 16 يمثل العرض بالسم و10 تحويله الى مليمتر و3.94 يمثل تحويل الملمتر الى طيقة قياس الشاشة
Dim wdth_lin As Single = 16 * 10 * 3.94
Dim hght_lin As Single = 26 * 10 * 3.94

تحديد الهامش الشمال
Dim lft As Single = ((e.PageBounds.Width - wdth_lin) / 2) / 3.94
Dim tp As Single = 4 * 10
'تغييير قياس الصفحة الى مليمتر
e.Graphics.PageUnit = GraphicsUnit.Millimeter
Dim strt As Single = 0
عرض الجدول الكلى عبارة عن 5 اعمدة باجمالى 16 سم
العمود الاول 1سم والثانى 5سم والثالث والرابع 3سم والاخير 4 سم
Dim wdth As Single = 16 * 10
ارتفاع الجدول عبارة عن عدد صفوف الداتا جرد مضافا اليها 1 ليمثل صف العناويين × 1 سم
Dim hght As Single = (dta_data.RowCount + 1) * 10

تغيير سمك الرسم لحدود الجدول
Dim pns As New Pen(Color.Black, 0.75)
رسم الحدود الرئيسية للجدول
e.Graphics.DrawRectangle(pns, lft, tp, wdth, hght)
pns.Width = 0.25
رسم الخطوط الرأسية للجدول من خلال حلقة تكرارية
For ii As Integer = 1 To dta_data.ColumnCount
زيادة الاذاحة اليسرى بمقدار قيمة عرض العمود
Select Case ii
العمود الاول من اليسار ويمثل رقم التليفون وعرضه 4 سم
Case 1 : strt = strt + 4 * 10
العمود الثانى من اليسار ويمثل الراتب وعرضه 3 سم
Case 2 : strt = strt + 3 * 10
العمود الثالث من اليسار ويمثل الوظيفة وعرضه 3 سم
Case 3 : strt = strt + 3 * 10
العمود الاول من اليسار ويمثل الاسم وعرضه 5 سم
Case 4 : strt = strt + 5 * 10
End Select

e.Graphics.DrawLine(pns, lft + strt, tp, lft + strt, tp + hght)
Next
زيادة الاذاحة الرأسية بمقدار 4 سم - قيمة الفراغ العلوى بالاضافة الى 1 سم لتحديد قيمة الصف الاول ليكون اجمالى الاذاحة 5 سم
Dim er As Single = 5 * 10
رسم الخطوط الافقية للجدول من خلال حلقة تكرارية وقمنا بزيادة 1 على عدد صفوف الداتا لتمثيل صف العناويين
For ii As Integer = 1 To dta_data.RowCount + 1
e.Graphics.DrawLine(pns, lft, er, lft + wdth, er)
زيادة الاذاحة الرأسية بمقدار 1 سم - اضافة صف
er = er + 1 * 10
Next

تعريف متغير يمثل التنسيق النصى وضبط المحاذاة الى وسط ومنتصف
Dim strfrmt As New StringFormat(0, 1)
strfrmt.Alignment = StringAlignment.Center
strfrmt.LineAlignment = StringAlignment.Center
تحويل لغة الارقام الى العربية
strfrmt.SetDigitSubstitution(1, StringDigitSubstitute.Traditional)
تعريف نوعى خط لاستخدامهما فى الطباعة
Dim fnt1 As New Font("Times New Roman", 3.5, FontStyle.Bold, GraphicsUnit.Millimeter)
Dim fnt2 As New Font("Mudir MT", 6, FontStyle.Bold, GraphicsUnit.Millimeter)
Dim txt As String
ضبط الاذاحة اليسرى على 2 سم وهى تمثل قيمة نصف العمود الاخير والذى يمثل رقم التليفون لضمان توسيط النص
strt = 2 * 10
ضبط الاذاحة الرأسية الى 4 سم + نصف سم يمثل منتصف الصف رأسيا
er = 4.5 * 10
طباعة صف العناويين
For i As Integer = dta_data.ColumnCount - 1 To 0 Step -1
txt = dta_data.Columns(i).HeaderText
e.Graphics.DrawString(txt, fnt1, Brushes.Black, lft + strt, er, strfrmt)
بعد طباعة نص كل عمود يتم اعادة ضبط الاذاحة اليسرة بحيث
نضيف قيمة نصف عرض العمود السابق ونجمع عليها نصف عرض العمود التالى
Select Case i
Case dta_data.ColumnCount - 1 : strt = strt + 2 * 10 + 1.5 * 10
Case dta_data.ColumnCount - 2 : strt = strt + 1.5 * 10 + 1.5 * 10
Case dta_data.ColumnCount - 3 : strt = strt + 1.5 * 10 + 2.5 * 10
Case dta_data.ColumnCount - 4 : strt = strt + 2.5 * 10 + 0.5 * 10
End Select

Next
بداية(الحلقة)
ضبط الاذاحة الرأسية الى 5 سم + نصف سم يمثل منتصف الصف رأسيا
er = 5.5 * 10
حلقة لقراءة بيانات صفوف الداتا
For i As Integer = 0 To dta_data.RowCount - 1
جعل الاذاحة اليسرى تبدأ من منتص عرض العمود 3.5 ÷ 2 عند الانتقال الى صف جديد
strt = 2 * 10
حلقة لقراءة محتويات اعمدة الداتا من الاخر الى الاول
For ii As Integer = dta_data.ColumnCount - 1 To 0 Step -1
txt = dta_data.Item(ii, i).Value.ToString
e.Graphics.DrawString(txt, fnt1, Brushes.Black, lft + strt, er, strfrmt)
بعد طباعة نص كل عمود يتم اعادة ضبط الاذاحة اليسرة بحيث
نضيف قيمة نصف عرض العمود السابق ونجمع عليها نصف عرض العمود التالى
Select Case ii
Case dta_data.ColumnCount - 1 : strt = strt + 2 * 10 + 1.5 * 10
Case dta_data.ColumnCount - 2 : strt = strt + 1.5 * 10 + 1.5 * 10
Case dta_data.ColumnCount - 3 : strt = strt + 1.5 * 10 + 2.5 * 10
Case dta_data.ColumnCount - 4 : strt = strt + 2.5 * 10 + 0.5 * 10
End Select
Next
زيادة الاذاحة الرأسية بمقدار 1 سم - اضافة سطر
er = er + 1 * 10
Next



طباعة العنوان الرئيسى
لتوسيط العنوان الرئيسى قسمنا عرض الورقة 16 سم ÷ 2
strt = (16 * 10) / 2
جعلنا الذاحة العلوية 2 سم
er = 2 * 10
txt = Label1.Text
e.Graphics.DrawString(txt, fnt2, Brushes.Black, lft + strt, er, strfrmt)

الكود التالى فى button معاينة الطباعة والذى اسميناه btn_prev
prnt_prev.ShowDialog()
الكود التالى فى button معاينة الطباعة والذى اسميناه btn_prnt

prnt_doc.Print()
الرجوع الى أعلى الصفحة
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى