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

ولكن بية مشكلة

1- يطبع من اليسار الي اليمين  اريد التعديل ليطبع ن اليمين الي اليسار
2- لايقوم بتحديد الصفوف او الاعمدة المراد الطباعة منها   اريد التعديل ليحدد صفوفو واعمدة اختارها


PHP كود :
Imports System.Drawing.Printing
 
Module DataGridViewPrinter
 
  Public DataGridViewToPrint 
As New DataGridView
 
  Public DefaultPageSettings 
As PageSettings = New PageSettings()
 
 
 Public WithEvents DocToPrint As New PrintDocument
 
  Private lPageNo 
As String ""
 
 Private sPageNo As String ""
 
 Private oStringFormat As StringFormat
  Private oStringFormatComboBox 
As StringFormat
  Private oButton 
As Button
  Private oCheckbox 
As CheckBox
  Private oComboBox 
As ComboBox
  Private nTotalWidth 
As Int16
  Private nRowPos 
As Int16
  Private NewPage 
As Boolean
  Private nPageNo 
As Int16
  Private Header 
As String
  Private FooterComment 
As String ""
 
 
 Public Sub StartPrint(ByVal GridToPrint As DataGridViewByVal PrintAsLandscape As BooleanByVal ShowPrintPreview As BooleanByVal HeaderToPrint As StringByVal CommentToPrint As String)
 
 
 DataGridViewToPrint GridToPrint
  Header 
HeaderToPrint
  FooterComment 
CommentToPrint
 
  
'DataGridViewToPrint.Columns(2).Visible = False ' Use to hide a col. (index no.)
 
 
 ' Set up Default Page Settings
  DocToPrint.DefaultPageSettings.Landscape = PrintAsLandscape
 
  DocToPrint.DefaultPageSettings.Margins.Left = 25
  DocToPrint.DefaultPageSettings.Margins.Right = 75
  DocToPrint.DefaultPageSettings.Margins.Top = 25
  DocToPrint.DefaultPageSettings.Margins.Bottom = 75
 
  DocToPrint.OriginAtMargins = True ' 
takes margins into account
 
  If ShowPrintPreview 
True Then
 
  Dim dlgPrintPreview 
As New PrintPreviewDialog
 
  dlgPrintPreview
.ClientSize = New System.Drawing.Size(600600)
 
 dlgPrintPreview.Document DocToPrint ' Previews print
  dlgPrintPreview.ShowDialog()
 
  Else
 
  ' 
 Allow the user to choose a printer and specify other settings.
 
 Dim dlgPrint As New PrintDialog
 
  With dlgPrint
  
.AllowSelection False
  
.ShowNetwork False
  
.AllowCurrentPage True
  
.AllowSomePages True
  
.Document DocToPrint
  End With
 
  
'  If the user clicked OK, print the document.
  If dlgPrint.ShowDialog = Windows.Forms.DialogResult.OK Then
  DocToPrint.Print()
  End If
 
  End If
 
  End Sub
 
  Public Sub DocToPrint_BeginPrint(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintEventArgs) Handles DocToPrint.BeginPrint
 
  oStringFormat = New StringFormat
  oStringFormat.Alignment = StringAlignment.Near
  oStringFormat.LineAlignment = StringAlignment.Center
  oStringFormat.Trimming = StringTrimming.EllipsisCharacter
 
  oStringFormatComboBox = New StringFormat
  oStringFormatComboBox.LineAlignment = StringAlignment.Center
  oStringFormatComboBox.FormatFlags = StringFormatFlags.NoWrap
  oStringFormatComboBox.Trimming = StringTrimming.EllipsisCharacter
 
  oButton = New Button
  oCheckbox = New CheckBox
  oComboBox = New ComboBox
 
  nTotalWidth = 0
 
  For Each oColumn As DataGridViewColumn In DataGridViewToPrint.Columns
  If oColumn.Visible = True Then ' 
Prints only Visible columns
  nTotalWidth 
+= oColumn.Width
  End 
If
 
 Next
 
  nPageNo 
1
  NewPage 
True
  nRowPos 
0
 
  End Sub
 
  Public Sub DocToPrint_EndPrint
(ByVal sender As ObjectByVal e As System.Drawing.Printing.PrintEventArgsHandles DocToPrint.EndPrint
  
'Not currently used
  End Sub
 
  Public Sub DocToPrint_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles DocToPrint.PrintPage
 
  Static oColumnLefts As New ArrayList
  Static oColumnWidths As New ArrayList
  Static oColumnTypes As New ArrayList
  Static nHeight As Int16
 
  Dim nWidth, i, nRowsPerPage As Int16
  Dim nTop As Int16 = e.MarginBounds.Top
  Dim nLeft As Int16 = e.MarginBounds.Left
 
  If nPageNo = 1 Then
 
  oColumnLefts.Clear()
  oColumnWidths.Clear()
  oColumnTypes.Clear()
 
  For Each oColumn As DataGridViewColumn In DataGridViewToPrint.Columns
  If oColumn.Visible = True Then
  nWidth = CType(Math.Floor(oColumn.Width / nTotalWidth * nTotalWidth * (e.MarginBounds.Width / nTotalWidth)), Int16)
 
  nHeight = e.Graphics.MeasureString(oColumn.HeaderText, oColumn.InheritedStyle.Font, nWidth).Height + 11
 
  oColumnLefts.Add(nLeft)
  oColumnWidths.Add(nWidth)
  oColumnTypes.Add(oColumn.GetType)
  nLeft += nWidth
  End If
  Next
 
  End If
 
  Do While nRowPos < DataGridViewToPrint.Rows.Count - 1
 
  Dim oRow As DataGridViewRow = DataGridViewToPrint.Rows(nRowPos)
 
  If nTop + nHeight >= e.MarginBounds.Height + e.MarginBounds.Top Then
 
  DrawFooter(e, nRowsPerPage)
 
  NewPage = True
  nPageNo += 1
  e.HasMorePages = True
  Exit Sub
 
  Else
 
  If NewPage Then
 
  ' 
Draw Header
  e
.Graphics.DrawString(Header, New Font(DataGridViewToPrint.FontFontStyle.Bold), Brushes.Blacke.MarginBounds.Lefte.MarginBounds.Top e.Graphics.MeasureString(Header, New Font(DataGridViewToPrint.FontFontStyle.Bold), e.MarginBounds.Width).Height 13)
 
 
 ' Draw Columns
  nTop = e.MarginBounds.Top + 20
  i = 0
  For Each oColumn As DataGridViewColumn In DataGridViewToPrint.Columns
  If oColumn.Visible = True Then
  e.Graphics.FillRectangle(New SolidBrush(Drawing.Color.LightGray), New Rectangle(oColumnLefts(i), nTop, oColumnWidths(i), nHeight))
  e.Graphics.DrawRectangle(Pens.Black, New Rectangle(oColumnLefts(i), nTop, oColumnWidths(i), nHeight))
  e.Graphics.DrawString(oColumn.HeaderText, oColumn.InheritedStyle.Font, New SolidBrush(oColumn.InheritedStyle.ForeColor), New RectangleF(oColumnLefts(i), nTop, oColumnWidths(i), nHeight), oStringFormat)
  i += 1
  End If
 
  Next
  NewPage = False
 
  End If
 
  nTop += nHeight
  i = 0
  For Each oCell As DataGridViewCell In oRow.Cells
  If oCell.Visible = True Then
  If oColumnTypes(i) Is GetType(DataGridViewTextBoxColumn) OrElse oColumnTypes(i) Is GetType(DataGridViewLinkColumn) Then
 
  e.Graphics.DrawString(oCell.Value.ToString, oCell.InheritedStyle.Font, New SolidBrush(oCell.InheritedStyle.ForeColor), New RectangleF(oColumnLefts(i), nTop, oColumnWidths(i), nHeight), oStringFormat)
 
  ElseIf oColumnTypes(i) Is GetType(DataGridViewButtonColumn) Then
 
  oButton.Text = oCell.Value.ToString
  oButton.Size = New Size(oColumnWidths(i), nHeight)
  Dim oBitmap As New Bitmap(oButton.Width, oButton.Height)
  oButton.DrawToBitmap(oBitmap, New Rectangle(0, 0, oBitmap.Width, oBitmap.Height))
  e.Graphics.DrawImage(oBitmap, New Point(oColumnLefts(i), nTop))
 
  ElseIf oColumnTypes(i) Is GetType(DataGridViewCheckBoxColumn) Then
 
  oCheckbox.Size = New Size(14, 14)
  oCheckbox.Checked = CType(oCell.Value, Boolean)
  Dim oBitmap As New Bitmap(oColumnWidths(i), nHeight)
  Dim oTempGraphics As Graphics = Graphics.FromImage(oBitmap)
  oTempGraphics.FillRectangle(Brushes.White, New Rectangle(0, 0, oBitmap.Width, oBitmap.Height))
  oCheckbox.DrawToBitmap(oBitmap, New Rectangle(CType((oBitmap.Width - oCheckbox.Width) / 2, Int32), CType((oBitmap.Height - oCheckbox.Height) / 2, Int32), oCheckbox.Width, oCheckbox.Height))
  e.Graphics.DrawImage(oBitmap, New Point(oColumnLefts(i), nTop))
 
  ElseIf oColumnTypes(i) Is GetType(DataGridViewComboBoxColumn) Then
 
  oComboBox.Size = New Size(oColumnWidths(i), nHeight)
  Dim oBitmap As New Bitmap(oComboBox.Width, oComboBox.Height)
  oComboBox.DrawToBitmap(oBitmap, New Rectangle(0, 0, oBitmap.Width, oBitmap.Height))
  e.Graphics.DrawImage(oBitmap, New Point(oColumnLefts(i), nTop))
  e.Graphics.DrawString(oCell.Value.ToString, oCell.InheritedStyle.Font, New SolidBrush(oCell.InheritedStyle.ForeColor), New RectangleF(oColumnLefts(i) + 1, nTop, oColumnWidths(i) - 16, nHeight), oStringFormatComboBox)
 
  ElseIf oColumnTypes(i) Is GetType(DataGridViewImageColumn) Then
 
  Dim oCellSize As Rectangle = New Rectangle(oColumnLefts(i), nTop, oColumnWidths(i), nHeight)
  Dim oImageSize As Size = CType(oCell.Value, Image).Size
  e.Graphics.DrawImage(oCell.Value, New Rectangle(oColumnLefts(i) + CType(((oCellSize.Width - oImageSize.Width) / 2), Int32), nTop + CType(((oCellSize.Height - oImageSize.Height) / 2), Int32), CType(oCell.Value, Image).Width, CType(oCell.Value, Image).Height))
 
  End If
 
  e.Graphics.DrawRectangle(Pens.Black, New Rectangle(oColumnLefts(i), nTop, oColumnWidths(i), nHeight))
 
  i += 1
  End If
  Next
 
  End If
 
  nRowPos += 1
  nRowsPerPage += 1
 
  Loop
 
  DrawFooter(e, nRowsPerPage)
 
  e.HasMorePages = False
 
  End Sub
 
  Public Sub DrawFooter(ByVal e As System.Drawing.Printing.PrintPageEventArgs, ByVal RowsPerPage As Int32)
 
  Dim sPageNo As String = nPageNo.ToString + " من "
 
  If nPageNo = "1" Then
 
  lPageNo = Math.Ceiling((DataGridViewToPrint.Rows.Count - 1) / RowsPerPage).ToString()
  sPageNo = nPageNo.ToString + " من " + lPageNo
 
  Else
 
  sPageNo = nPageNo.ToString + " من " + lPageNo
 
  End If
 
  ' 
Right Align User Name
  e
.Graphics.DrawString(FooterCommentDataGridViewToPrint.FontBrushes.Blacke.MarginBounds.Left + (e.MarginBounds.Width e.Graphics.MeasureString(FooterCommentDataGridViewToPrint.Fonte.MarginBounds.Width).Width), e.MarginBounds.Top e.MarginBounds.Height 7)
 
 
 ' Left Align - Date/Time
  e.Graphics.DrawString(Now.ToLongDateString + " " + Now.ToShortTimeString, DataGridViewToPrint.Font, Brushes.Black, e.MarginBounds.Left, e.MarginBounds.Top + e.MarginBounds.Height + 7)
 
  ' 
Center Page NoInfo
  e
.Graphics.DrawString(sPageNoDataGridViewToPrint.FontBrushes.Blacke.MarginBounds.Left + (e.MarginBounds.Width e.Graphics.MeasureString(sPageNoDataGridViewToPrint.Fonte.MarginBounds.Width).Width) / 2e.MarginBounds.Top e.MarginBounds.Height 7)
 
 
 End Sub
 
End Module 
الرد }}}
تم الشكر بواسطة:


الردود في هذا الموضوع
اريد التعديل علي المديول التالي - بواسطة محمد اسماعيل - 08-10-17, 05:47 PM

المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  كيف نستخرج نص الالتاريخ الاول من النص التالي: justforit 0 131 31-10-25, 05:33 PM
آخر رد: justforit
  [سؤال] اريد طباعة تقرير ريبورت فيو مباشرة فور عرض التقرير mh66 1 562 22-03-25, 09:59 AM
آخر رد: mh66
  اريد كود لو سمحتم خالد كامل1 10 1,224 15-02-25, 02:15 PM
آخر رد: خالد كامل1
  اريد كود معين اثابكم الله خالد كامل1 1 456 04-02-25, 09:28 PM
آخر رد: aliday03
  اريد كود يحذف جميع سجلات جدول بقاعدة بيانات اكسس دفعه واحده khalidalwdi 2 640 18-11-24, 01:02 AM
آخر رد: rdxdz
  اريد جلب عدد محدد من السجلات من قاعدة بيانات اكسس الى الداتا قراد فيو يوجد مثال khalidalwdi 2 669 12-11-24, 12:19 PM
آخر رد: khalidalwdi
  ما هو الخطأ في كود التعديل التالي صالح عبدالله 6 583 12-10-24, 04:02 PM
آخر رد: صالح عبدالله
  [نقاش] اريد مسااعدة انا مبتدئة ف بحر غارق?? ..N 1 349 29-09-24, 11:16 PM
آخر رد: justforit
  مشكلة عند التعديل على البيانات F.H.M 5 486 12-09-24, 05:31 PM
آخر رد: F.H.M
Exclamation [VB.NET] اريد كود لتصدير البيانات من DataGridView الى ملف Excel zazasami 1 498 04-08-24, 09:15 PM
آخر رد: mrfenix93

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


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