منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : طباعة داتا جريد في جدولين على الريبورت
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
السلام عليكم و رحمة الله و بركاته ...
اخوني في  الله لدي تقرير استدعي البيانات من جدول واحد و يتم إظهار البيانات في داتا جريد
اريد طباعة بيانات داتا جريد على عمودين على نفس الصفحة نفس الصفحة في الريبورت ..
العمود الواحد يحتوي على 35 سجل .. في حال زاد العدد عن 35 يذهب تلقائياً للعمود الثاني
حاولت كثيراً بدون جدوي
حتى انني قمت بإنشاء 2 dataset  , و 2 datatable
بحيث لو وصل العدد لل 35 ينتقل لل 2 dataset  , و 2 datatable و يطبع باقي البيانات على العمود الثاني في نفس الصفحة
و لكن مع شديد الاسف لم تنجح الطريقة ..
كود :
Dim f55 As New Freport
       Dim ds1 As New DataSet1
       Dim ds2 As New DataSet1
       Dim dr11 As DataRow
       Dim dr12 As DataRow
       dr11 = ds1.DataTable1.NewRow
       

       Dim i As Integer = 1
       For Each r As DataGridViewRow In DataGridView1.Rows


           dr11 = ds1.DataTable1.NewRow

           dr11!a5 = txttrno.Text
           dr11!a10 = txtfromm.Text
           dr11!a11 = DateTimePicker1.Value.Date.Date
           dr11!a12 = txttoo.Text
           'If i <= 35 Then
           dr11!a9 = (i)

           dr11!a8 = (r.Cells("empname").Value)
           dr11!a7 = (r.Cells("dept").Value)
           dr11!a6 = (r.Cells("pno").Value)


           ds1.DataTable1.Rows.Add(dr11)
           i = i + 1
           'End If


       Next
       Dim cr As New Crtrheel
       cr.SetDataSource(ds1)



       For Each r12 As DataGridViewRow In DataGridView1.Rows
           dr12 = ds1.DataTable11.NewRow


           If i > 35 Then
               dr12!b1 = (i)

               dr12!b2 = (r12.Cells("empname").Value)
               dr12!b3 = (r12.Cells("dept").Value)
               dr12!b4 = (r12.Cells("pno").Value)

           End If
           ds1.DataTable11.Rows.Add(dr12)
           i = i + 1
       Next
       'ds1.DataTable1.Rows.Add(dr11)
       
       cr1.SetDataSource(ds1)
       cr.SetDataSource(ds2)
       f55.CrystalReportViewer1.ReportSource = Nothing
       f55.CrystalReportViewer1.ReportSource = cr

       f55.ShowDialog()
اكيد فيه شئ بسيط لم اقم بعمله ..
ارجوا المساعدة
وعليكم السلام ورحمة الله وبركاته

أظن أن مشكلتك هي مع الرسم   وليس مع منطق الكود ،

حيث أن طباعة التقارير هي عبارة عن رسم ويتعامل مع الصفحة كـ إحداثيات رياضية وليس كخلاية مصفوفة، وليست تعبئة بيانات

يعني لما يخلص من تعبئة سطر لن يعود إليه إلا إذا أعطيته أمر بالعودة (للاحداثيات التي تريد) ويبدأ منها من جديد..

إذا أردت أن يعمل برنامجك عليك أن تفكر في البداية كيف تجعل برنامجك يعرف كم عدد النتائج الموجودة قبل الطباعة
ثم يقسم تلك النتائج .. 

فعندما يبدأ بالطباعة(أو عمل التقرير كما تسميه) .. عليه أن يطبع في الخلية الأولى من العمود الأول النتيجة (A1)

وبنفس الوقت إذا كان هناك نتيجة (A36) يطبعها في الخلية الأولى من العمود الثاني،
وبنفس الوقت إذا كان هناك نتيجة (A71) يطبعها في الخلية الأولى من العمود الثالث ..  وهكذا..

ثم ينتقل للسطر الثاني ويبدأ من جديد :

A2   في الخلية الثانية من العمود الأول.
A37   في الخلية الثانية من العمود الثاني.
A72   في الخلية الثانية من العمود الثالث.
...
وهكذا ..


يعني عليك أن تهتم بالحسابات قبل البدء بالطباعة معرفة كم تحتاج من الأعمدة ...


بالتوفيق ..