problems with printing a dbgrid

Posted on 1998-01-02
Medium Priority
Last Modified: 2012-08-14
I am trying to print the data and column header in a  dbgrid by using the printer.print (rowdata),but since the column header contains more characters than the column data therefore they get all mixed up ie. I am trying to print the  dbgrid like MS Excel sheet (without the grid) with each column data under its corresponding column header. I tried to use vbtab and adding spaces but it still did not work.

So is there a way in VB5 to print the data in dbgrid with its column headers in a nice format?

any comments,suggestions or sample code?
Question by:khoty
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 4
  • 2
  • 2
  • +1

Expert Comment

ID: 1448984
Here's my suggestion.  I am assuming yu have a data control on your form with the records you have, because you probably bound it to the data control

Add a crystal report control to your form.  Set the ReportSource = 3, set the datasource = data1 or whatever teh data control is.

when you want the report, just sset the action property of the crystal control to 1, and it will print the recordset.  With Crystal Reports Pro (I dont have it) you can actually do this same method with the data grid itself.

Expert Comment

ID: 1448985
knoty, You can do it easily using the printer object just like you're doing.  To align columns use the currentx property.  For example,

Printer.CurrentX =

When you're printing a row, just set the CurrentX for each column just before print the column.

If this answer is more in line with what you are seeking, please reject anthonyc's answer and give me credit.  If you need further help with this method, just comment.

Author Comment

ID: 1448986
if I use the printer.currentX= then I have to truncate some column headers, in order to fit all data (because the number of columns headers is greater than the width of the page) or I may
need to change the page orientation to landscape at run time (which I don't know how)and if the user insists on portrait view then everything will be mixed up. Is there a way to dectect this at run time and change the font size to shrink everything and fit  it in one page (ie. fit it to page width)?
What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.


Accepted Solution

dirtdart earned 400 total points
ID: 1448987
If you use the DrawText API, you can create a bounding box for each text field that you send to the printer.  You can specify word wrapping in this box, and it will automatically wrap the words for you.

        Left As Long
        Top As Long
        Right As Long
        Bottom As Long
End Type
        cbSize As Long
        lpszDocName As String
        lpszOutput As String
End Type

Declare Function DrawText Lib "user32" Alias "DrawTextA" (ByVal hdc As Long, ByVal lpStr As String, ByVal nCount As Long, lpRect As RECT, ByVal wFormat As Long) As Long

Declare Function StartDoc Lib "gdi32" Alias "StartDocA" (ByVal hdc As Long, lpdi As DOCINFO) As Long

Declare Function StartPage Lib "gdi32" Alias "StartPage" (ByVal hdc As Long) As Long

Declare Function EndDoc Lib "gdi32" Alias "EndDoc" (ByVal hdc As Long) As LongDeclare Function EndDoc Lib "gdi32" Alias "EndDoc" (ByVal hDC As Long) As Long

Declare Function EndPage Lib "gdi32" Alias "EndPage" (ByVal hdc As Long) As Long

Public Const DT_WORDBREAK = &H10

Private Sub cmdPrintGrid_Click()

Dim doc As DOCINFO
Dim rec As RECT
Dim pDC As Long

pDC = Printer.hDC

StartDoc pDC, doc
StartPage pDC

rec.top = 10
rec.bottom = 500
rec.left = 10
rec.right = 500

DrawText pDC, DBGrid1.Text, Len(DBGrid1.Text), rec, DT_WORDBREAK

EndPage pDC
EndDoc pDC

End Sub

Of Course, this would only print one cell of the grid, but I think you get the idea.


Expert Comment

ID: 1448988
What was wrong with  my answer?  It works fine.

Author Comment

ID: 1448989
there is nothing wrong with your answer anthonyc ....I was looking for something simple ie. I just want to have a file print option in File menu and when the user clicks on it ...it will just send the data in dbgrid to printer....I don't know about the  report generation...it may make it a little complex ...
oh well thanks anyway...


Expert Comment

ID: 1448990
Sometimes, the answer isn't as simple as you'd like - but that doesn't make it incorrect.  Looks to me like dirtdart has offered the most trying to help you.  I'd go ahead and award these points to dirtdart.

Expert Comment

ID: 1448991
complex?   It takes 5 lines of code, and the report generates itself!  Not to mention it comes out more presentable!

Expert Comment

ID: 1448992
More presentable than what?  I can make my reports look better than anything Crystal ever thought about.

Expert Comment

ID: 1448993
still, I don't see how 5 lines of code is more complex then 5 api calls.

Featured Post

Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

I was working on a PowerPoint add-in the other day and a client asked me "can you implement a feature which processes a chart when it's pasted into a slide from another deck?". It got me wondering how to hook into built-in ribbon events in Office.
This article describes how to use a set of graphical playing cards to create a Draw Poker game in Excel or VB6.
Get people started with the process of using Access VBA to control Outlook using automation, Microsoft Access can control other applications. An example is the ability to programmatically talk to Microsoft Outlook. Using automation, an Access applic…
Show developers how to use a criteria form to limit the data that appears on an Access report. It is a common requirement that users can specify the criteria for a report at runtime. The easiest way to accomplish this is using a criteria form that a…
Suggested Courses

752 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question