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



ياليت طريقة جعل طابعه تطبع من يمين لليسار الي يعرف للمثال المرفق في المشاركة الاولى ..

وهذا الكود الي استخدمه الي ابي احل مشكلته 



كود :
 Private Structure pageDetails
       Dim columns As Integer
       Dim rows As Integer
       Dim startCol As Integer
       Dim startRow As Integer
   End Structure

   Private pages As Dictionary(Of Integer, pageDetails)

   Dim maxPagesWide As Integer
   Dim maxPagesTall As Integer



   Private Sub btnPrint_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnPrint.Click
       PrintDocument1.Print()
   End Sub


   Private Sub PrintDocument1_BeginPrint(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintEventArgs) Handles PrintDocument1.BeginPrint
       ''this removes the printed page margins
       PrintDocument1.OriginAtMargins = True
       PrintDocument1.DefaultPageSettings.Margins = New Drawing.Printing.Margins(0, 0, 0, 0)

       pages = New Dictionary(Of Integer, pageDetails)

       Dim maxWidth As Integer = CInt(PrintDocument1.DefaultPageSettings.PrintableArea.Width) - 40
       Dim maxHeight As Integer = CInt(PrintDocument1.DefaultPageSettings.PrintableArea.Height) - 40 + Label1.Height

       Dim pageCounter As Integer = 0
       pages.Add(pageCounter, New pageDetails)

       Dim columnCounter As Integer = 0

       Dim columnSum As Integer = DataGridView3.RowHeadersWidth

       For c As Integer = 0 To DataGridView3.Columns.Count - 1
           If columnSum + DataGridView3.Columns(c).Width < maxWidth Then
               columnSum += DataGridView3.Columns(c).Width
               columnCounter += 1
           Else
               pages(pageCounter) = New pageDetails With {.columns = columnCounter, .rows = 0, .startCol = pages(pageCounter).startCol}
               columnSum = DataGridView3.RowHeadersWidth + DataGridView3.Columns(c).Width
               columnCounter = 1
               pageCounter += 1
               pages.Add(pageCounter, New pageDetails With {.startCol = c})
           End If
           If c = DataGridView3.Columns.Count - 1 Then
               If pages(pageCounter).columns = 0 Then
                   pages(pageCounter) = New pageDetails With {.columns = columnCounter, .rows = 0, .startCol = pages(pageCounter).startCol}
               End If
           End If
       Next

       maxPagesWide = pages.Keys.Max + 1

       pageCounter = 0

       Dim rowCounter As Integer = 0

       Dim rowSum As Integer = DataGridView3.ColumnHeadersHeight

       For r As Integer = 0 To DataGridView3.Rows.Count - 2
           If rowSum + DataGridView3.Rows(r).Height < maxHeight Then
               rowSum += DataGridView3.Rows(r).Height
               rowCounter += 1
           Else
               pages(pageCounter) = New pageDetails With {.columns = pages(pageCounter).columns, .rows = rowCounter, .startCol = pages(pageCounter).startCol, .startRow = pages(pageCounter).startRow}
               For x As Integer = 1 To maxPagesWide - 1
                   pages(pageCounter + x) = New pageDetails With {.columns = pages(pageCounter + x).columns, .rows = rowCounter, .startCol = pages(pageCounter + x).startCol, .startRow = pages(pageCounter).startRow}
               Next

               pageCounter += maxPagesWide
               For x As Integer = 0 To maxPagesWide - 1
                   pages.Add(pageCounter + x, New pageDetails With {.columns = pages(x).columns, .rows = 0, .startCol = pages(x).startCol, .startRow = r})
               Next

               rowSum = DataGridView3.ColumnHeadersHeight + DataGridView3.Rows(r).Height
               rowCounter = 1
           End If
           If r = DataGridView3.Rows.Count - 2 Then
               For x As Integer = 0 To maxPagesWide - 1
                   If pages(pageCounter + x).rows = 0 Then
                       pages(pageCounter + x) = New pageDetails With {.columns = pages(pageCounter + x).columns, .rows = rowCounter, .startCol = pages(pageCounter + x).startCol, .startRow = pages(pageCounter + x).startRow}
                   End If
               Next
           End If
       Next

       maxPagesTall = pages.Count \ maxPagesWide

   End Sub

   ''' <summary>
   ''' this is the actual printing routine.
   ''' using the pagedetails i calculated earlier, it prints a title,
   ''' + as much of the datagridview as will fit on 1 page, then moves to the next page.
   ''' this is setup to be dynamic. try resizing the dgv columns or rows
   ''' </summary>
   ''' <param name="sender"></param>
   ''' <param name="e"></param>
   ''' <remarks></remarks>
   Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
       Dim rect As New Rectangle(20, 20, CInt(PrintDocument1.DefaultPageSettings.PrintableArea.Width), Label1.Height)
       Dim sf As New StringFormat
       sf.Alignment = StringAlignment.Center
       sf.LineAlignment = StringAlignment.Center

       e.Graphics.DrawString(Label1.Text, Label1.Font, Brushes.Black, rect, sf)

       sf.Alignment = StringAlignment.Near

       Dim startX As Integer = 50
       Dim startY As Integer = rect.Bottom

       Static startPage As Integer = 0

       For p As Integer = startPage To pages.Count - 1
           Dim cell As New Rectangle(startX, startY, DataGridView3.RowHeadersWidth, DataGridView3.ColumnHeadersHeight)
           e.Graphics.FillRectangle(New SolidBrush(SystemColors.ControlLight), cell)
           e.Graphics.DrawRectangle(Pens.Black, cell)

           startY += DataGridView3.ColumnHeadersHeight

           For r As Integer = pages(p).startRow To pages(p).startRow + pages(p).rows - 1
               cell = New Rectangle(startX, startY, DataGridView3.RowHeadersWidth, DataGridView3.Rows(r).Height)
               e.Graphics.FillRectangle(New SolidBrush(SystemColors.ControlLight), cell)
               e.Graphics.DrawRectangle(Pens.Black, cell)
               e.Graphics.DrawString(DataGridView3.Rows(r).HeaderCell.Value.ToString, DataGridView1.Font, Brushes.Black, cell, sf)
               startY += DataGridView3.Rows(r).Height
           Next

           startX += cell.Width
           startY = rect.Bottom

           For c As Integer = pages(p).startCol To pages(p).startCol + pages(p).columns - 1
               cell = New Rectangle(startX, startY, DataGridView3.Columns(c).Width, DataGridView3.ColumnHeadersHeight)
               e.Graphics.FillRectangle(New SolidBrush(SystemColors.ControlLight), cell)
               e.Graphics.DrawRectangle(Pens.Black, cell)
               e.Graphics.DrawString(DataGridView3.Columns(c).HeaderCell.Value.ToString, DataGridView3.Font, Brushes.Black, cell, sf)
               startX += DataGridView3.Columns(c).Width
           Next

           startY = rect.Bottom + DataGridView3.ColumnHeadersHeight

           For r As Integer = pages(p).startRow To pages(p).startRow + pages(p).rows - 1
               startX = 50 + DataGridView3.RowHeadersWidth
               For c As Integer = pages(p).startCol To pages(p).startCol + pages(p).columns - 1
                   cell = New Rectangle(startX, startY, DataGridView3.Columns(c).Width, DataGridView3.Rows(r).Height)
                   e.Graphics.DrawRectangle(Pens.Black, cell)
                   'e.Graphics.DrawString(DataGridView3(c, r).Value.ToString, DataGridView3.Font, Brushes.Black, cell, sf)
                   startX += DataGridView3.Columns(c).Width
               Next
               startY += DataGridView3.Rows(r).Height

           Next

           If p <> pages.Count - 1 Then
               startPage = p + 1
               e.HasMorePages = True
               Return
           Else
               startPage = 0
           End If


       Next

   End Sub




   Private Sub btnPreview_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPreview.Click


       Dim ppd As New PrintPreviewDialog
       ppd.Document = PrintDocument1
       ppd.WindowState = FormWindowState.Maximized
       ppd.ShowDialog()
   End Sub

او اذا فيه حل اضع ترقيم في حقل او او كولم وسوف تسكتيع الاداه السابقه بعدها طباعته

فعلا اذا يمكن وضع الترقيم التلقائي في حقل رح تنحل مشكلة الاداة ياليت تفيدوني اذا هذا الشي ممكن ..

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


الردود في هذا الموضوع
RE: استفسار عن تحويل كود طباعة داتا قريد فيو من اليسار لليمين - بواسطة Marwan9990 - 18-07-17, 04:10 PM


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


يقوم بقرائة الموضوع: