تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[VB.NET] مشكلة الصفحات الجديدة عند الطباعة
#1
السلام عليكم

عندي داتاجريد فيو بها سلع واريد صنع باركود لها علي اساس يتم اختيار الصنف من خلال شيك بوكس بكل صف واختيار السعر وعمل باركود بالسعر مثلا وبعد ذالك يتم اختيار صف او مجموعة صفوف او كل الصفوف عند فحصة واختيار ة من عمود شيك بوكس لطباعة معا .

دية اعمدة الداتا جريد

كود :
.Columns.Add("CheckPrint", GetType(Boolean))
          .Columns.Add("BarCode", GetType(Image))
          .Columns.Add("Price", GetType(Integer))
          .Columns.Add("Num", GetType(Integer))
          .Columns.Add("qualty", GetType(String))
          .Columns.Add("Name", GetType(String))

دة كود نقل الباركود لعمود الصور بالداتا جريد فيو

كود :
Dim barcodes As New List(Of Image)
Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
    On Error Resume Next
    barcodes.Clear()
    For Each r As DataGridViewRow In GetCheckedRows(DataGridView1, 0)
        With r
            Dim im As Image = Code128Rendering.MakeBarcodeImage(.Cells("Price").Value.ToString, .Cells("Num").Value.ToString, .Cells("qualty").Value.ToString, .Cells("Name").Value.ToString, 2, True)
            .Cells("BarCode").Value = im

            barcodes.Add(im)

        End With
    Next
End Sub

دة كود فحص عمود شيك بوكس لمعرفة الصنف بالصفوف المراد طباعتة

كود :
Function GetCheckedRows(ByVal dgv As DataGridView, ByVal col As Integer) As List(Of DataGridViewRow)
    Dim checkedRows As New List(Of DataGridViewRow)
    For inx As Integer = 0 To dgv.RowCount - 1
        dgv(1, inx).Value = Nothing
        Dim checked As DataGridViewCheckBoxCell = TryCast(dgv(col, inx), DataGridViewCheckBoxCell)
        If CBool(checked.EditedFormattedValue) Then checkedRows.Add(dgv.Rows(inx))
    Next
    Return checkedRows
End Function


دةكود الطباعة 

كود :
Private Sub PrintDocument1_PrintPage(ByVal sender As Object, ByVal e As Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
      On Error Resume Next
      Dim x As Integer = 20
      Dim y As Integer = 300
      For Each bc As Image In barcodes
          e.Graphics.DrawImage(bc, New Point(x, y))
          y += 200
      Next
  End Sub

ودة كود العرض قبل الطباعة


كود :
Private Sub Button3_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button3.Click
       On Error Resume Next
       PrintPreviewDialog1.Show()
   
End Sub


عندي مشكة في الاتي :

1- الكود بيطبع وبيظهر الباركود بالداتاجريد اولا وبعد ذالك بصفحةالطبااعة ولكن المشكلة الاولي ان الباركود يصل لاخر الصفحة ولاينتقل لصفحة طباعة الجديدة
2- اريد الطباعة ان تتم ووضع الاسم اعلي الباركود والسعر ااسفل منة لكل باركود بصفحة الطباعة

صورةلطباعة وتحديد شكل المشكلة

   
الرد }}}
تم الشكر بواسطة:
#2
هذا مثال تستطيع عن طريقة تحديد عدد السجلات التي تريد معاينتها في الصفحة الواحدة و الباقي يذهب لصفحة ثانية عدله ليتناسب مع عملك :

هذا مثال بسيط
الرد }}}
#3
(02-08-19, 05:44 AM)asemshahen5 كتب : هذا مثال تستطيع عن طريقة تحديد عدد السجلات التي تريد معاينتها في الصفحة الواحدة و الباقي يذهب لصفحة ثانية عدله ليتناسب مع عملك :

هذا مثال بسيط
مش عارف اظبط فكرتك مع طباعة الصور عندي  ياريت تعديل بسيط علي اكوادي وخصوصا ان المتغير نصوص بفكرتك ولدي صور
الرد }}}
تم الشكر بواسطة: asemshahen5 , ابراهيم ايبو , حريف برمجة
#4
مش عارف اظبط فكرتك مع طباعة الصور عندي  ياريت تعديل بسيط علي اكوادي وخصوصا ان المتغير نصوص بفكرتك ولدي صور

مفيش فرق :

PHP كود :
e.Graphics.DrawImage(PictureBox1.Image301518060

PHP كود :
e.Graphics.DrawImage(PictureBox1.Image2301518060

بدال :

PHP كود :
e.Graphics.DrawString(String.Format("Page {0}, Record {1}: {2}",
 
                                               pageNumber,
 
                                               overallRecordIndex,
 
                                               lines(overallRecordIndex)),
 
                                 fn,
 
                                 Brushes.Black,
 
                                 10,
 
                                 yOffset
و الصفحة طوليا تملئ بـ 18 باركود و الباقي اصبح سهلا .
الرد }}}
#5
(02-08-19, 06:55 AM)asemshahen5 كتب : مش عارف اظبط فكرتك مع طباعة الصور عندي  ياريت تعديل بسيط علي اكوادي وخصوصا ان المتغير نصوص بفكرتك ولدي صور

مفيش فرق :

PHP كود :
e.Graphics.DrawImage(PictureBox1.Image301518060

PHP كود :
e.Graphics.DrawImage(PictureBox1.Image2301518060

بدال :

PHP كود :
e.Graphics.DrawString(String.Format("Page {0}, Record {1}: {2}",
 
                                               pageNumber,
 
                                               overallRecordIndex,
 
                                               lines(overallRecordIndex)),
 
                                 fn,
 
                                 Brushes.Black,
 
                                 10,
 
                                 yOffset
و الصفحة طوليا تملئ بـ 18 باركود و الباقي اصبح سهلا .

حاولت بالطريقة دية ولم احل المشكلة

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


كود :
Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
       On Error Resume Next
       barcodes.Clear()
       For Each r As DataGridViewRow In GetCheckedRows(DataGridView1, 0)
           With r
               Dim im As Image = Code128Rendering.MakeBarcodeImage(.Cells("Price").Value.ToString, .Cells("Num").Value.ToString, .Cells("Code").Value.ToString, .Cells("Name").Value.ToString, 2, True)
               '.Cells("BarCode").Value = im
               barcodes.Add(im)
               lines.Add(.Cells("Price").Value.ToString)
           End With
       Next
       overallRecordIndex = 0
       pageNumber = 1
   End Sub
   Private Sub PrintDocument1_PrintPage(ByVal sender As Object, ByVal e As Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
       On Error Resume Next
       Dim pageRecordIndex = 0
       Dim yOffset = 10
       'كو تغيير الخط'
       Dim fn As New System.Drawing.Font("Cambria", 10.0!, System.Drawing.FontStyle.Bold)
       'تحديد عدد السجلات في الصفحة'

       Do While pageRecordIndex < 4 AndAlso overallRecordIndex < barcodes.Count AndAlso overallRecordIndex < lines.Count
           e.Graphics.DrawString(String.Format("Page {0}, Record {1}: {2}",
                                             pageNumber,
                                             overallRecordIndex,
                                             lines(overallRecordIndex)),
                               fn,
                               Brushes.Black,
                               100,
                               yOffset + 20)
           For Each bc As Image In barcodes
               e.Graphics.DrawImage(bc, 100, yOffset)
               yOffset += 100
           Next
           overallRecordIndex += 1
           pageRecordIndex += 1
       Loop
       e.HasMorePages = (overallRecordIndex < barcodes.Count)
       If e.HasMorePages Then
           pageNumber += 1
       End If
   End Sub
الرد }}}
تم الشكر بواسطة: حريف برمجة



التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم