السبت، 8 أكتوبر 2011

طباعة تقرير حسب طلب المستخدم وقت التنفيذ

هذه هي من مقدمة طلبات اي عميل عندما تبرمج له برنامج قواعد بيانات يقول لك انه يريد طباعة تقارير مفتوحة المصدر حسب طلب المستخدم وقت التنفيذ اي يختار مايشاء من صفوف واعمدة وقت التنفيذ وهذه طريقة شبه مستحيلة من باب ان التقارير ثابتة في بيئة الدوت نت  وافضل وسيلة لأرضاء المستخدم وتوفير هذا الطلب هي بتكوين عدد من التقارير متشابه في المظهر وتسلسل الاعمدة واكيد في   ورقة A4 لا يتجاوز عدد الاعمدة سبعة اي نكون سبعة تقارير مرتبة كما في الشكل


لاحظ ترتيب ارتباط الحقول في الجادول بقى نفسه
الان نكون نافذة للطباعة ونضع checkbox امام كل مستخدم وقائمة بالاعمدة الموجودة حتى يختار ما يريد المستخدم الطباعة منها

ثم من صفحة العرض في اداة Datagridviwer نكون ما يختاره المستخدم من اعمدة وصفوف بشكل جدول ونرسله الى التقرير الملائم له لطباعته






numberofselected = 0
If CheckedListBox2.Items.Count < 1 Then
MsgBox("لم تقم باختيار اي حقل لطباعته", MsgBoxStyle.Information, "Error Print")
Exit Sub
End If
numberofselected = 0
For i = 0 To DataGridView1.Rows.Count - 1
Try
If DataGridView1.Item(0, i).Value = True Then
numberofselected = numberofselected + 1
End If
Catch ex As Exception
End Try
Next
If numberofselected = 0 Then
MsgBox("لم تقم باختيار اي صف خاص ياي شخص لطباعته", MsgBoxStyle.Information, "Error Print")
Exit Sub
End If
If CheckedListBox2.Items.Count > 7 Then
MsgBox("تجاوز عد الاعمدة التي اخترتها عرضا ورقة الطباعة يجب ان لايتجاوز عدد الاعمدة 7 اعمدة", MsgBoxStyle.Information, "Error Print")
Exit Sub

End If
Me.Cursor = Cursors.WaitCursor
PrintDocumuntFile.Enabled = False
TheArrayOFNamesColoumToPrintIT()
dt = New printFormsDataSet.table1stdDataTable
dt.TableName = "table1std"
Dim count As Integer = 1
Dim dr As DataRow
For i = 0 To DataGridView1.Rows.Count - 1
Try
If DataGridView1.Item(0, i).Value = True Then
dr = dt.Rows.Add
' the tasatsol
dr.Item("a3") = count
dr.Item("a6") = "التسلسل"
For j = 0 To DataGridView1.ColumnCount - 1
' for 2 coloums and above
If Val(ComboBox3.Text) >= 2 Then
If ArrayOFPrintColoum(0) = DataGridView1.Columns(j).HeaderText Then
dr.Item("a2") = DataGridView1.Item(j, i).Value.ToString
dr.Item("a5") = DataGridView1.Columns(j).HeaderText
End If
If ArrayOFPrintColoum(1) = DataGridView1.Columns(j).HeaderText Then
dr.Item("a1") = DataGridView1.Item(j, i).Value.ToString
dr.Item("a4") = DataGridView1.Columns(j).HeaderText
End If
End If
' for 3 coloums and above
If Val(ComboBox3.Text) >= 3 Then
If ArrayOFPrintColoum(2) = DataGridView1.Columns(j).HeaderText Then
dr.Item("a7") = DataGridView1.Item(j, i).Value.ToString
dr.Item("a8") = DataGridView1.Columns(j).HeaderText
End If
End If
' for 4 coloums and above
If Val(ComboBox3.Text) >= 4 Then
If ArrayOFPrintColoum(3) = DataGridView1.Columns(j).HeaderText Then
dr.Item("a9") = DataGridView1.Item(j, i).Value.ToString
dr.Item("a10") = DataGridView1.Columns(j).HeaderText
End If
End If
' for 5 coloums and above
If Val(ComboBox3.Text) >= 5 Then
If ArrayOFPrintColoum(4) = DataGridView1.Columns(j).HeaderText Then
dr.Item("a11") = DataGridView1.Item(j, i).Value.ToString
dr.Item("a12") = DataGridView1.Columns(j).HeaderText
End If
End If
' for 6 coloums and above
If Val(ComboBox3.Text) >= 6 Then
If ArrayOFPrintColoum(5) = DataGridView1.Columns(j).HeaderText Then
dr.Item("a13") = DataGridView1.Item(j, i).Value.ToString
dr.Item("a14") = DataGridView1.Columns(j).HeaderText
End If
End If
' for 7 coloums and above
If Val(ComboBox3.Text) >= 7 Then
If ArrayOFPrintColoum(6) = DataGridView1.Columns(j).HeaderText Then
dr.Item("a15") = DataGridView1.Item(j, i).Value.ToString
dr.Item("a16") = DataGridView1.Columns(j).HeaderText
End If
End If
Next
count += 1
End If
Catch ex As Exception
End Try
Next
Dim dss As New DataSet
dss.Clear()
dss.Tables.Add(dt)
' for select the report will print
Select Case Val(ComboBox3.Text)
Case 2
Dim p3 As New PrintForm3Coloums
p3.table1stdBindingSource.DataSource = dss
p3.Show()
Case 3
Dim p4 As New PrintForm4Coloums
p4.table1stdBindingSource.DataSource = dss
p4.Show()
Case 4
Dim p5 As New PrintForm5Coloums
p5.table1stdBindingSource.DataSource = dss
p5.Show()
Case 5
Dim p6 As New PrintForm6Coloums
p6.table1stdBindingSource.DataSource = dss
p6.Show()
Case 6
Dim p7 As New PrintForm7Coloums
p7.table1stdBindingSource.DataSource = dss
p7.Show()
Case 7
Dim p8 As New PrintForm8Coloums
p8.table1stdBindingSource.DataSource = dss
p8.Show()
End Select
Me.Cursor = Cursors.Default
PrintDocumuntFile.Enabled = True
End Sub



الان جرب المثال سيطبع لك تقرير حسب طلبك










المثال موجود في مرفقات كتاب 
خطوة بخطوة نحو قاعدة بيانات ترضي العميل


إرسال تعليق