首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > VB Dotnet >

VB2005中DataGridView打印的問題。该怎么解决

2012-10-30 
VB2005中DataGridView打印的問題。如何將DataGridView的内容直接打印出來?打印的内容需要是“所見即所得”樣

VB2005中DataGridView打印的問題。
如何將DataGridView的内容直接打印出來?
打印的内容需要是“所見即所得”樣式,即DataGridView看起來什麽版式打印出來就什麽版式。
因爲DataGridView裏面有很多Cell是不同顔色的,例如紅色、藍色、黃色等。不同背景色的Cell的數據有不同含義,所以希望打印可以把DataGridView上看到的屬性都能打印出來。

請高手指點!有示例程序或代碼參考最好。

[解决办法]
會打印,但顏色不會。。呵呵。幫頂。
[解决办法]
那需要你自己画上去。呵呵

VB.NET code
  Dim PreView As New PrintPreviewDialog        PreView.Document = pd        Try            PreView.ShowDialog()        Catch ex As Exception            MessageBox.Show(ex.Message, "测试", MessageBoxButtons.OK, MessageBoxIcon.Asterisk)        End Try    End Sub    Private Sub MenuPageSetup_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuPageSetup.Click        Dim Ps As New PageSetupDialog        Ps.Document = pd        Try            Ps.ShowDialog()        Catch ex As Exception            MessageBox.Show(ex.Message, "测试", MessageBoxButtons.OK, MessageBoxIcon.Asterisk)        End Try    End Sub    Dim pageno As Int16    Dim NewPage As Boolean    Dim RowPos As Int16    Private Sub pd_EndPrint(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintEventArgs) Handles pd.EndPrint        RowPos = 0    End Sub    Private Sub pd_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles pd.PrintPage        Dim TmpWidth As Int16, TmpLeft As Int16, Tmptop As Int16, Tolwidth As Int16        Dim ColumnLefts As New ArrayList, ColumnWidths As New ArrayList        Dim i As Int16        Dim CellHeight As Int16        Dim StrFormat As New StringFormat        Dim StringFont As Font = DataGrid.DefaultCellStyle.Font        With StrFormat            .LineAlignment = StringAlignment.Center            .Alignment = StringAlignment.Center            .Trimming = StringTrimming.EllipsisCharacter        End With        TmpLeft = e.MarginBounds.X        Tmptop = e.MarginBounds.Y        '获取打印单元格的高度和宽度        For Each Gridcol As DataGridViewColumn In DataGrid.Columns            If Not Gridcol.Visible Then Continue For            TmpWidth = Gridcol.Width            ColumnLefts.Add(TmpLeft)            ColumnWidths.Add(TmpWidth)            TmpLeft += TmpWidth            Tolwidth += TmpWidth        Next        '调整打印位置使其居中        TmpLeft = (e.MarginBounds.Width - Tolwidth) / 2        '打印表头        For Each GridCol As DataGridViewColumn In DataGrid.Columns            If Not GridCol.Visible Then Continue For            e.Graphics.DrawRectangle(Pens.Black, New Rectangle(ColumnLefts(i) + TmpLeft, _                    Tmptop, ColumnWidths(i), DataGrid.ColumnHeadersHeight))            e.Graphics.DrawString(GridCol.HeaderText, DataGrid.ColumnHeadersDefaultCellStyle.Font, _                    New SolidBrush(GridCol.InheritedStyle.ForeColor), _                    New RectangleF(ColumnLefts(i) + TmpLeft, Tmptop, ColumnWidths(i), _                    DataGrid.ColumnHeadersHeight), StrFormat)            i += 1        Next        i = 0        StrFormat.Alignment = StringAlignment.Near '设置单元格文本的对齐方式        '打印表格和内部文本——————————        Try            '一行一行的打印            Do While RowPos <= DataGrid.Rows.Count - 1                Dim GridRow As DataGridViewRow = DataGrid.Rows(RowPos)                If GridRow.IsNewRow Then                    RowPos += 1                    Continue Do                End If                CellHeight = GridRow.Height                If Tmptop < e.MarginBounds.Height Then    '判断是否分页                    '打印表主体                    For Each Cel As DataGridViewCell In GridRow.Cells                        If Not Cel.OwningColumn.Visible Then Continue For                        e.Graphics.DrawString(Cel.Value.ToString, Cel.InheritedStyle.Font, _                                            New SolidBrush(Cel.InheritedStyle.ForeColor), _                                            New RectangleF(ColumnLefts(i) + TmpLeft, Tmptop + DataGrid.ColumnHeadersHeight, ColumnWidths(i), _                                            CellHeight), StrFormat)   '画单元格                        e.Graphics.DrawRectangle(Pens.Black, New Rectangle(ColumnLefts(i) + TmpLeft, Tmptop + DataGrid.ColumnHeadersHeight, ColumnWidths(i), CellHeight))      '画单元格内的文本                        i += 1                    Next                    Tmptop += CellHeight                    i = 0                    RowPos += 1                    e.HasMorePages = False                Else                    e.HasMorePages = True                    Exit Do                End If            Loop        Catch ex As Printing.InvalidPrinterException            MessageBox.Show(ex.Message, "测试", MessageBoxButtons.OK, MessageBoxIcon.Error)            Exit Sub        End Try    End Sub 

热点排行