PDA

View Full Version : میشه یک datagride رو پرینت کرد ؟



k_m
یک شنبه 06 شهریور 1384, 14:11 عصر
من می خوام بدونم میشه فقط یک datagride رو از یک فرم پرینت کرد .

omid_Ahmadi
یک شنبه 06 شهریور 1384, 18:31 عصر
خوب برای چاپ اطلاعات داخل دیتا گرید میتونید از Componentهای مربوط به تهیه گزارش مثل Active Report و یا Crystal Report استفاده کنید.

k_m
دوشنبه 07 شهریور 1384, 15:23 عصر
ممنون که توجه کردی. اما من در مورد پرینت کردن صفر صفرم . تا حالا هیچ فرمی رو به هیچ روشی پرینت نکردم ولی الان بهش نیاز دارم .
ببین من یک سری اطلاعات رو از کاربر توی یک فرم می گیرم و بعد تویدیتا گرید نمایش می دم . ولی حالا ازم خواستند که این گزارش رو چاپ کنم . اگه میشه بیشتر راهنماییم کنید .
ممنون

iamebadi
دوشنبه 07 شهریور 1384, 16:11 عصر
با سلام
می تونید از کنترل Print Preview استفاده کنید.راهنمای استفاده از آن هم در MSDN آمده است.

omid_Ahmadi
دوشنبه 07 شهریور 1384, 17:05 عصر
همونطور که گفتم بهترین روش استفاده از نرم افزارهای گزارش گیر مثل ActiveReport و یا Crystal Report است که توضیح کار با این برنامه ها از یک و یا چند تاپیک بیشتره. در همین سایت میتونی مقالات خوبی رو راجع به این مورد پیدا کنی به خصوص در بخش "طراحی گزارشات با استفاده از Crystal Report".
از نمونه هایی که همراه با خود این برنامه ها هم نصب میشه میتونی استفاده کنی، به خصوص Active Report که به نسبت از Crystal Report ساده تره (و به مراتب ضعیفتر) مثالهای خوبی در Manual خودش داره.

Hamedm
دوشنبه 07 شهریور 1384, 18:03 عصر
با سلام
می تونید از کنترل Print Preview استفاده کنید.راهنمای استفاده از آن هم در MSDN آمده است.
سلام

بیخیال بابا. PrintPreview خیلی LowLevel است و خیلی دردسر داده. این کنترل برای موارد خاص است، مثلا اگه برنامت قسمتی به نام صدور چک داره، بهتره که این قسمت رو با PrintPreview طراحی کنی. میتونید از Report Writer های معروفی مثل Crystal Report یا Active Report استفاده کنی.

در پناه حق موفق باشید و شرتوان

علیرضا مداح
سه شنبه 15 شهریور 1384, 00:28 صبح
سلام دوست عزیز

The Code Project - A class to print and print preview a data grid control - VB.NET (http://www.codeproject.com/vb/net/DataGridPrinter.asp)

k_m
سه شنبه 22 شهریور 1384, 07:38 صبح
سلام استاد
ممنون از راهنمایی تون کلاس فوق العاده ای بود ولی من فقط یک مشکل باها ش دارم اونم اینه که اگه دستی توی data grid مقدار وارد کنم هیچ مساله ای نیست و کاملا درست کار می کنه فقط اگه اونو به پایگاه وصل کنم و اطلاعات رو از اونجا بخونم وقت پرینت یک un handled exception می ده این هم متن details اونه .
اگه میشه هم در رابط با این پیغام برام توضیح بدین و هم بگین چه جوری میشه اونو رفع کرد .
ممنون

See the end of this message for details on invoking
just-in-time (JIT) debugging instead of this dialog box.

************** Exception Text **************
System.InvalidCastException: Specified cast is not valid.
at System.Windows.Forms.PrintPreviewControl.Calculate PageInfo()
at System.Windows.Forms.Control.InvokeMarshaledCallba cks()


************** Loaded Assemblies **************
mscorlib
Assembly Version: 1.0.3300.0
Win32 Version: 1.0.3705.6018
CodeBase: file:///d:/windows/microsoft.net/framework/v1.0.3705/mscorlib.dll
----------------------------------------
WindowsApplication1
Assembly Version: 1.0.2080.41579
Win32 Version: 1.0.2080.41579
CodeBase: file:///D:/Documents%20and%20Settings/kazemaccount/Desktop/pak/WindowsApplication1/bin/WindowsApplication1.exe
----------------------------------------
System.Windows.Forms
Assembly Version: 1.0.3300.0
Win32 Version: 1.0.3705.6018
CodeBase: file:///d:/windows/assembly/gac/system.windows.forms/1.0.3300.0__b77a5c561934e089/system.windows.forms.dll
----------------------------------------
System
Assembly Version: 1.0.3300.0
Win32 Version: 1.0.3705.6018
CodeBase: file:///d:/windows/assembly/gac/system/1.0.3300.0__b77a5c561934e089/system.dll
----------------------------------------
System.Drawing
Assembly Version: 1.0.3300.0
Win32 Version: 1.0.3705.6018
CodeBase: file:///d:/windows/assembly/gac/system.drawing/1.0.3300.0__b03f5f7f11d50a3a/system.drawing.dll
----------------------------------------
System.Data
Assembly Version: 1.0.3300.0
Win32 Version: 1.0.3705.6018
CodeBase: file:///d:/windows/assembly/gac/system.data/1.0.3300.0__b77a5c561934e089/system.data.dll
----------------------------------------
System.Xml
Assembly Version: 1.0.3300.0
Win32 Version: 1.0.3705.6018
CodeBase: file:///d:/windows/assembly/gac/system.xml/1.0.3300.0__b77a5c561934e089/system.xml.dll
----------------------------------------
Accessibility
Assembly Version: 1.0.3300.0
Win32 Version: 1.0.3705.0
CodeBase: file:///d:/windows/assembly/gac/accessibility/1.0.3300.0__b03f5f7f11d50a3a/accessibility.dll
----------------------------------------
Microsoft.VisualBasic
Assembly Version: 7.0.3300.0
Win32 Version: 7.00.9951
CodeBase: file:///d:/windows/assembly/gac/microsoft.visualbasic/7.0.3300.0__b03f5f7f11d50a3a/microsoft.visualbasic.dll
----------------------------------------
System.EnterpriseServices
Assembly Version: 1.0.3300.0
Win32 Version: 1.0.3705.6018
CodeBase: file:///d:/windows/assembly/gac/system.enterpriseservices/1.0.3300.0__b03f5f7f11d50a3a/system.enterpriseservices.dll
----------------------------------------

************** JIT Debugging **************
To enable just in time (JIT) debugging, the config file for this
application or machine (machine.config) must have the
jitDebugging value set in the system.windows.forms section.
The application must also be compiled with debugging
enabled.

For example:

<configuration>
<system.windows.forms jitDebugging="true" />
</configuration>

When JIT debugging is enabled, any unhandled exception
will be sent to the JIT debugger registered on the machine
rather than being handled by this dialog.

moiid63
یک شنبه 23 اردیبهشت 1386, 13:04 عصر
'----------------------------- کنترل های مورد استفاده
'-------------PageSetupDialog
'-------------PrintDocument
'-------------PrintPreviewDialog
'--------------------------------------------------------------
Private Sub MnItmPRINT_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MnItmPRINT.Click
If -DataSet-Name- .Rows.Count > 0 Then
CountLine = 0
NumberColumnsForPrint = -DataSet-Name- .Columns.Count
Titr = " جدول ..."
'-در این صفحه متغییر های سراسری را کاربر تنظیم می کند
'-مانند تعداد ستونها یا نوع خط جدول و ...
Dim OBJ As New PrintSettingPAGE()
'PrintSettingPAGE' يك فرم است كه بوسيله خودم طراحي شده '
'و در آن متغير هاي سراسري مقدار دهي ميشوند'
OBJ.ShowDialog()
PageSetupDialog1.ShowDialog()
PrintPreviewDialog1.ShowDialog()
Else
MsgBox("اطلاعاتی برای پرینت وجود ندارد", MsgBoxStyle.OKOnly, "")
End If
End Sub
'------------------------------------------------------------------
'----------------------------- توابع مورد نیاز پرینت ---------------
'-------------------------------------------------------------------
Private Sub PrintDocument1_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
'----------------------------- متغیر های سراسری استفاده شده-------------
'-------------dim VerticalPAGE as Boolean افقی یا عمودی بودن صفحه
'-------------dim NumberColumnsForPrint as integer
'--------DirectionVertical تعداد ستونهای دیتاست که میخواهیم چاپ کنیم
'-------------dim LinesPerPage as Integer تعداد خطهای هر صفحه
'-------------dim Titr as String تیتر هر صفحه
'--------------------------------------------------------------
Dim xCell As Integer
Dim yCell As Integer
Dim WidthCell As Integer
Dim xTITR As Integer
Dim yTITR As Integer
Dim HeightTITR As Integer
Dim WidthTITR As Integer
'--------------------------------------------------------------
'------------مقدار دهی اندازه ها و موقعیت سلول های جدول
'--------------------------------------------------------------
yTITR = CInt(PageSetupDialog1.PageSettings.Margins.Top)
xTITR = CInt(PageSetupDialog1.PageSettings.Margins.Left)
If PageSetupDialog1.PageSettings.Landscape = True Then
WidthTITR = CInt(PageSetupDialog1.PageSettings.PaperSize.Heigh t) - (xTITR + CInt(PageSetupDialog1.PageSettings.Margins.Right))
Else
WidthTITR = CInt(PageSetupDialog1.PageSettings.PaperSize.Width ) - (xTITR + CInt(PageSetupDialog1.PageSettings.Margins.Right))
End If
HeightTITR = 35
xCell = PageSetupDialog1.PageSettings.Margins.Left
yCell = yTITR + HeightTITR
WidthCell = CInt(WidthTITR \ NumberColumnsForPrint)
'--------------------------------------------------------------
'------------محاسبه تعداد خطهای هر صفحه
Dim LinesPerPage As Integer
If PageSetupDialog1.PageSettings.Landscape = True Then
LinesPerPage = CInt((CInt(PageSetupDialog1.PageSettings.PaperSize .Width) - (yTITR + HeightTITR + HeightHeaderCell + CInt(PageSetupDialog1.PageSettings.Margins.Bottom) )) \ HeightCell)
Else
LinesPerPage = CInt((CInt(PageSetupDialog1.PageSettings.PaperSize .Height) - (yTITR + HeightTITR + HeightHeaderCell + CInt(PageSetupDialog1.PageSettings.Margins.Bottom) )) \ HeightCell)
End If
'----------------------------------------------------------------------
Dim RectF As RectangleF
If -DataSet-Name- .Rows.Count <> 0 Then
'----------------------------------------------------------
'------------ نوشتن متن تیتر
'----------------------------------------------------------
Dim StrForm As StringFormat
StrForm = New StringFormat(StringFormatFlags.DirectionRightToLef t)
StrForm.Alignment = StringAlignment.Center
StrForm.LineAlignment = StringAlignment.Center
RectF.X = xTITR ' xTITR = 15 or 790
RectF.Y = yTITR ' yTITR = 15 or 15
RectF.Height = HeightTITR ' HeightTITR = 25 or 25
RectF.Width = WidthTITR ' WidthTITR = 750 or 1140
e.Graphics.DrawString(Titr, TitrFont, Brushes.Black, RectF, StrForm)
'----------------------------------------------------------
'------------ نوشتن سطرها
'----------------------------------------------------------
RectF.X = xCell
RectF.Y = yCell + HeightHeaderCell
RectF.Width = WidthCell
RectF.Height = HeightCell
StrForm.Alignment = StringAlignment.Far
StrForm.LineAlignment = StringAlignment.Far
Dim PrintFont As New Font("Arial", 10)
PrintFont = DataGrid1.Font
Dim StrField As String '' برای دریافت فیلدهای جدول
Dim counter As Integer '' شمارهنده
For I2 = 0 To LinesPerPage - 1
RectF.X = xCell
For I = (NumberColumnsForPrint - 1) To 0 Step -1
StrField = " " & CStr( -DataSet-Name- .Rows(CountLine).Item(I))
e.Graphics.DrawRectangle(PenRow, RectF.X, RectF.Y, RectF.Width, RectF.Height)
e.Graphics.DrawString(StrField, PrintFont, Brushes.Black, RectF, StrForm)
RectF.X += WidthCell
StrField = ""
Next
RectF.Y += HeightCell
CountLine += 1
If -DataSet-Name- .Rows.Count = CountLine Then
Exit For
End If
Next
'----------------------------------------------------------
'------------ کشیدن نام ستونها
'----------------------------------------------------------
StrForm.Alignment = StringAlignment.Center
StrForm.LineAlignment = StringAlignment.Center
RectF.X = xCell
RectF.Y = yCell
RectF.Width = WidthCell
RectF.Height = HeightHeaderCell
PrintFont = DataGrid1.HeaderFont
For I = (NumberColumnsForPrint - 1) To 0 Step -1
StrField = CStr( -DataSet-Name- .Columns(I).ColumnName)
e.Graphics.DrawRectangle(PenColumn, RectF.X, RectF.Y, RectF.Width, RectF.Height)
e.Graphics.DrawString(StrField, PrintFont, Brushes.Black, RectF, StrForm)
RectF.X += WidthCell
StrField = ""
Next
End If
'--------------------------------------------------------------
'------------اگر تعداد خطها زیاد شد باید صفحه دیگر ایجاد شود
'------------در غیر این صورت صفحه جدید نباید تولید شود
'--------------------------------------------------------------
If CountLine < -DataSet-Name- .Rows.Count Then
e.HasMorePages = True
Else
CountLine = 0
e.HasMorePages = False
End If
End Sub

maryam_jamshid
سه شنبه 21 خرداد 1387, 08:16 صبح
سلام
یکی از قسمت های کدها به صورت زیر هست:
NumberColumnsForPrint = -DataSet - Name - .Columns.Count
من وقتی به جای dataset-name ،نام دیتا گریدم رو قرار میدم error میده
reshtehghaboli.Columns.Count
برای رفع این مشکل باید چکار کنم؟؟؟
ضمنا از این خط کد هم ایراد میگیره
Dim OBJ As New PrintSettingPAGE
PrintSettingPAGEباید از چه نوعی تعریف کنم؟؟؟

moiid63
پنج شنبه 07 آذر 1387, 21:01 عصر
سلام
NumberColumnsForPrint = -DataSet - Name - .Columns.Count
به جاي -DataSet - Name نام ديتا ست استفاده كنيد نه ديتا گريد
در واقع اين كد ديتاست را چاپ مي كند نه ديتا گريد

PrintSettingPAGE يك فرم است كه بوسيله خودم طراحي شده
و در آن متغير هاي سراسري مقدار دهي ميشوند

----------------------------- متغیر های سراسری استفاده شده-------------
'-------------dim VerticalPAGE as Boolean افقی یا عمودی بودن صفحه
'-------------dim NumberColumnsForPrint as integer
'--------DirectionVertical تعداد ستونهای دیتاست که میخواهیم چاپ کنیم
'-------------dim LinesPerPage as Integer تعداد خطهای هر صفحه
'-------------dim Titr as String تیتر هر صفحه
'--------------------------------------------------------------