هذه هي من مقدمة طلبات اي عميل عندما تبرمج له برنامج قواعد بيانات يقول لك انه يريد طباعة تقارير مفتوحة المصدر حسب طلب المستخدم وقت التنفيذ اي يختار مايشاء من صفوف واعمدة وقت التنفيذ وهذه طريقة شبه مستحيلة من باب ان التقارير ثابتة في بيئة الدوت نت وافضل وسيلة لأرضاء المستخدم وتوفير هذا الطلب هي بتكوين عدد من التقارير متشابه في المظهر وتسلسل الاعمدة واكيد في ورقة A4 لا يتجاوز عدد الاعمدة سبعة اي نكون سبعة تقارير مرتبة كما في الشكل
لاحظ ترتيب ارتباط الحقول في الجادول بقى نفسه
الان نكون نافذة للطباعة ونضع checkbox امام كل مستخدم وقائمة بالاعمدة الموجودة حتى يختار ما يريد المستخدم الطباعة منها
الان نكون نافذة للطباعة ونضع 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
الان جرب المثال سيطبع لك تقرير حسب طلبك
End Sub
الان جرب المثال سيطبع لك تقرير حسب طلبك
ليست هناك تعليقات:
إرسال تعليق