2016-06-13 20 views
0

データベースから値を取得するdatagridviewを印刷しようとしましたが、それを行うことはできましたが、印刷後に列名が表示されない理由はわかりません。DataGridviewの印刷

Private Sub PrintDocument1_PrintPage(sender As Object, e As Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage 
     With DataGridView3 
      Dim fmt As StringFormat = New StringFormat(StringFormatFlags.LineLimit) 
      Dim text As String = ("TrashCollection - Estatísticas") 
      fmt.LineAlignment = StringAlignment.Center 
      fmt.Trimming = StringTrimming.EllipsisCharacter 
      e.Graphics.DrawString(text, New Font("Verdana", 10, FontStyle.Bold), Brushes.Black, 350, 30) 
      Dim y As Single = e.MarginBounds.Top 
      Do While mRow < DataGridView3.RowCount 
       Dim row As DataGridViewRow = .Rows(mRow) 
       Dim x As Single = e.MarginBounds.Left 
       Dim h As Single = 0 
       For Each cell As DataGridViewCell In row.Cells 
        Dim rc As RectangleF = New RectangleF(x, y, cell.Size.Width, cell.Size.Height) 
        e.Graphics.DrawRectangle(Pens.Black, rc.Left, rc.Top, rc.Width, rc.Height) 
        If (newpage) Then 
         e.Graphics.DrawString(DataGridView3.Columns(cell.ColumnIndex).HeaderText, .Font, Brushes.Black, rc, fmt) 
        Else 
         e.Graphics.DrawString(DataGridView3.Rows(cell.RowIndex).Cells(cell.ColumnIndex).FormattedValue.ToString(), .Font, Brushes.Black, rc, fmt) 
        End If 
        x += rc.Width 
        h = Math.Max(h, rc.Height) 
       Next 
       newpage = False 
       y += h 
       mRow += 1 
       If y + h > e.MarginBounds.Bottom Then 
        e.HasMorePages = True 
        mRow -= 0 
        newpage = True 
        Exit Sub 
       End If 
      Loop 
      mRow = 0 
     End With 
    End Sub 

そして、印刷ボタンに、私はこのコードの行があります:この1つはのPrintDocumentのためである

:以下は、私が現在使用しているコードであるので、

Private Sub cmdPrintDetailed_Click(sender As Object, e As EventArgs) Handles cmdPrintDetailed.Click 
     PrintDocument1.DefaultPageSettings.Landscape = True 
     PrintPreviewDialog1.Document = PrintDocument1 
     PrintPreviewDialog1.ShowDialog() 
    End Sub 

は、基本的には、単に行の代わりに列名も印刷できるようにしたいと考えています。印刷プレビューでは、すべてのdatagridviewを列で見ることができます。

答えて

0

これは私が見つけた最高の印刷例で、私はそれを私のデータグリッド印刷用に修正して使用しています。これは、あなたが列見出しを追加する際に役立ちます。 https://code.msdn.microsoft.com/VBNet-Printing-Example-bc3b0176

+0

Hey!ご協力いただきありがとうございますが、これはデータベースのデータで動作しますか? –

+0

さて、データがdatagridviewに入ったら、問題はありません。あなたのコードとコードを比較するだけです。リンクからのコードは、A4よりも広く、A4より長く印刷します。サンプルをロードして実行するだけです。 – minimalist

+0

私はそのコードを使用しようとしていましたが、 'オブジェクト参照はインスタンスとして設定されていません... 'というプレビューボタンにエラーが表示されました。どうすればいいですか? –