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

استفسار ل هنتو..

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

ياليت احد يفيدني ب طريقة صحيحه ل تغير اتجاه البيانات في الطباعه ..

هذا رابط الموضوع كامل كان الي نزلت منه المثال :

http://vb4arb.com/vb/showthread.php?tid=11839


ومشروع مرفق في المرفقات ايضا هنا ..


مودتي للجميع


الملفات المرفقة
.rar   Print DataGridView.rar (الحجم : 95.11 ك ب / التحميلات : 67)
الرد
تم الشكر بواسطة:
#2
اضفت له اداه الداتاقريد للطباعة  شوف الاضافة 

يمكن تجوز لك  Sleepy


الملفات المرفقة
.zip   Print DataGridView.zip (الحجم : 135.11 ك ب / التحميلات : 95)
Mish3l
الرد
تم الشكر بواسطة: mstfa1991
#3
اشكرك كثير عزيزي فعلا اكثر من الي محتاجه انته قدمت لي واعتذر على تاخر الرد ولكني لم استطع تجربته الا الان

رزقك ربي جنات النعيم ورحم لك والديك
الرد
تم الشكر بواسطة:
#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

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

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

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

الاداة تطبع اي شي مكتوب بالداتاقريد اذا فية ارقام تطبع

حسب ما هو متوفر بالداتاقريد

انت جرب على داتاقريد مصدر بياناتها من قاعدة بيانات وليس مصدر بياناتها من كود
Mish3l
الرد
تم الشكر بواسطة:
#6







ي اخوان حصلت هذا الكود هو شغال ميه ب ميه والاداة تدعم فكرته بحيث انه تضيف حق ف داتا قريد باسم اي دي 



كود :
Private Sub dgv1_CellValidating(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgv1.CellValidated
       For i = 0 To dgv1.Rows.Count - 1
           dgv1.Rows(i).Cells("id").Value = i + 1
       Next

   End Sub



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

احد يعرف شو الحل انا ابي الترقيم تلقائي يظهر على طول مع باقي البيانات في قريد فيو اول من اشغل الفورم ..


ياليت لي يعرف السبب يفيدني
الرد
تم الشكر بواسطة:
#7
رفع ل ضروره ل هنتو للي يعرف يفيدنا
الرد
تم الشكر بواسطة:
#8
يا أخ مروان

الشخص الذي صمم الأداة واضح انه ليس من العرب و لهذا هو صممها لتتناسب مع احتياجات اللغة الأم الخاصة به
ان كنت تريد تحويلها الي العربية
يجب أن تعيد كل عمليات الرسم لتحدث من اليمين لليسار
وهذا الأمر يحتاج لشخص لديه وقت و أيضا يكون بيفهم في الجرافكس بشكل جيد
الله معك
Retired
الرد
تم الشكر بواسطة: Marwan9990 , Marwan9990 , ابو ليلى
#9
(19-07-17, 03:07 PM)silverlight كتب : يا أخ مروان

الشخص الذي صمم الأداة واضح انه ليس من العرب و لهذا هو صممها لتتناسب مع احتياجات اللغة الأم الخاصة به
ان كنت تريد تحويلها الي العربية
يجب أن تعيد كل عمليات الرسم لتحدث من اليمين لليسار
وهذا الأمر يحتاج لشخص لديه وقت و أيضا يكون بيفهم في الجرافكس بشكل جيد
الله معك


اهلا عزيزي .. لا عزيزي انته فهمتي غلط .. انا ما اتكلم عن الادة الان ..

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

إقتباس :
إقتباس :
كود :
Private Sub dgv1_CellValidating(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgv1.CellValidated
       For i = 0 To dgv1.Rows.Count - 1
           dgv1.Rows(i).Cells("id").Value = i + 1
       Next

   End Sub
الرد
تم الشكر بواسطة:
#10
تم ايجاد الحل الف عافيه لكل من حاول يساعدني
الرد
تم الشكر بواسطة:



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


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