| |
VB.NET - Ein- und Umsteigerreport für vb.net | | | Autor: rtaucher | Datum: 22.07.08 08:06 |
| hallo!
ich suche etwass ähnliches wie crystal report, aber sollte gratis sein...
habt ihr da vielleicht ein paar tips?
danke!
mfg
rt
mfg
rt | |
Re: report für vb.net | | | Autor: Scorpi | Datum: 22.07.08 08:53 |
| in VS2008 gibt es sowas ähnliches auch einfach zu bedienen, sonst musste wohl oder übel viel rum proggen .... Hier mal ein kleines Beispiel, das Datagrids drucken:
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 sUserName As String
Private ÜSchriftart As New System.Drawing.Font("Arial", 12.0!, _
System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, _
CType(0, Byte))
Private ESchriftart As New System.Drawing.Font("Arial", 8.0!, _
System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType( _
0, Byte))
Private Sub PrintDocument1_BeginPrint(ByVal sender As Object, ByVal e As _
System.Drawing.Printing.PrintEventArgs) Handles PrintDocument1.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 Grid1.Columns
nTotalWidth += oColumn.Width
Next
nPageNo = 1
NewPage = True
nRowPos = 0
End Sub | |
Re: report für vb.net - Teil2 | | | Autor: Scorpi | Datum: 22.07.08 08:54 |
| Private Sub PrintDocument1_PrintPage(ByVal sender As Object, ByVal e As _
System.Drawing.Printing.PrintPageEventArgs) Handles _
PrintDocument1.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
For Each oColumn As DataGridViewColumn In Grid1.Columns
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
Next
End If
Do While nRowPos <= Grid1.Rows.Count - 1
Dim oRow As DataGridViewRow = Grid1.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(ÜSchriftart, _
FontStyle.Bold), Brushes.Black, e.MarginBounds.Left, _
e.MarginBounds.Top - e.Graphics.MeasureString(Header, New _
Font(ÜSchriftart, FontStyle.Bold), _
e.MarginBounds.Width).Height - 13)
' Draw Columns
nTop = e.MarginBounds.Top
i = 0
For Each oColumn As DataGridViewColumn In Grid1.Columns
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
Next
NewPage = False
End If
nTop += nHeight
i = 0
For Each oCell As DataGridViewCell In oRow.Cells
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)) | |
Re: report für vb.net -> Teil3 | | | Autor: Scorpi | Datum: 22.07.08 08:54 |
| 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
Next
End If
nRowPos += 1
nRowsPerPage += 1
Loop
DrawFooter(e, nRowsPerPage)
e.HasMorePages = False
End Sub
Private Sub DrawFooter(ByVal e As _
System.Drawing.Printing.PrintPageEventArgs, ByVal RowsPerPage As Int32)
Dim sPageNo As String = "Seite " & nPageNo.ToString
'Seiteneinstellung checken
If e.PageSettings.Margins.Top < 10 Then e.PageSettings.Margins.Top = 10
If e.PageSettings.Margins.Bottom < 10 Then _
e.PageSettings.Margins.Bottom = 10
'Abstand unten holen
Dim unten As Integer = e.PageSettings.Margins.Bottom - 15
' Right Align - User Name
e.Graphics.DrawString(sUserName, ESchriftart, Brushes.Black, _
e.MarginBounds.Left + (e.MarginBounds.Width - _
e.Graphics.MeasureString(sPageNo, ESchriftart, _
e.MarginBounds.Width).Width - 135), e.MarginBounds.Top + _
e.MarginBounds.Height - unten)
' Left Align - Date/Time
e.Graphics.DrawString(Now.ToLongDateString + " " + _
Now.ToShortTimeString, ESchriftart, Brushes.Black, _
e.MarginBounds.Left, e.MarginBounds.Top + e.MarginBounds.Height - _
unten)
' Center - Page No. Info
e.Graphics.DrawString(sPageNo, ESchriftart, Brushes.Black, _
e.MarginBounds.Left + (e.MarginBounds.Width - _
e.Graphics.MeasureString(sPageNo, ESchriftart, _
e.MarginBounds.Width).Width) / 2, e.MarginBounds.Top + _
e.MarginBounds.Height - unten)
End Sub | |
Re: report für vb.net - Teil2 | | | Autor: rtaucher | Datum: 22.07.08 08:55 |
| danke dir!
werd das mal probieren...
lg
rt
mfg
rt | |
Re: report für vb.net | | | Autor: FZelle (Moderator) | Datum: 22.07.08 09:34 |
| http://www.fyireporting.com/
Oder wenn Du VS.NET ab std hast, ist der ReportViewer von MS mit dabei. | |
Re: report für vb.net | | | Autor: Anhuera | Datum: 27.08.08 14:06 |
| Hallo !
habe hoffentlich nur ein kleines Problem mit dem ReportViewer von VS 2005. Ich finde dafür keine Lösung.
Ich habe mir einen Report erzeugt und kann ihn mir im ReportViewer auch ansehen und ausdrucken. Nur mit den Seiteneinstellungen bin ich nicht zufrieden. Der Report verwendet nicht Standardeinstellungen des VB-Projekts. Diese stehen aber auf dem Papierformat "Letter" und haben völlig eigene Randeinstellungen. Ich benötige allerdings "A4" und genau definierte Ränder.
Wie kann ich diese Standardeinstellungen ändern, damit sie im ReportViewer auch immer erkannt werden. Aktionen im ReportViewer wie Aktualisieren, Layoutänderung und Seiteneinstellung greifen immer nur auf die Standardeinstellungen.
Wer kann mir helfen ? Danke im Voraus
Andreas | |
Re: report für vb.net -> Teil3 | | | Autor: Erichbru | Datum: 25.01.23 13:03 |
| habe den Code bei mir verwendet und bekomme unerwartet einen Bug
Das Objekt des Typs "System.Byte[]" kann nicht in Typ "System.Drawing.Image" umgewandelt werden.
was kann ich da machen
ich speichere die Bilder in Typ "System.Byte[]".
PS wenn kein Bild da ist meckert er auch | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
vb@rchiv CD Vol.6 vb@rchiv Vol.6
Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
Online-Update-Funktion Entwickler-Vollversionen u.v.m.Jetzt zugreifen Tipp des Monats sevGraph (VB/VBA)
Grafische Auswertungen
Präsentieren Sie Ihre Daten mit wenig Aufwand in grafischer Form. sevGraph unterstützt hierbei Balken-, Linien- und Stapel-Diagramme (Stacked Bars), sowie 2D- und 3D-Tortendiagramme und arbeitet vollständig datenbankunabhängig! Weitere Infos
|