Hi,
When I use UltraGridPrintDocument to print a grid the grid is printed inside a border (see attached image). Is there anyway to get rid of this?
It doesn't appear in the PDF when using UltraGridDocumentExporter, which is what I'm trying to achieve when printing.
Kind regards,
Nathan
Hello Nathan,
There is a possibility of removing page border when printing with UltraGridPrintDocument using the BorderStyle property off its Page object. You can set UIElementBorderStyle.None to this property in order to remove the border. For example you can do something like this:
/ the page property is the section representing the // entire renderable area of the page. you can assign // a border around the margin area this.ultraPrintDocument1.Page.BorderStyle = UIElementBorderStyle.None;
Please let me know if I may be of further assistance.
Sincerely,Sahaja KokkalagaddaAssociate Software Developer
Hi Sahaja,
It doesn't seem to work. I'm using 2016.2.
My code is as follows:
Public Sub ExportGridToPrinter(ByVal grid1 As UltraGrid, ByVal grid2 As UltraGrid, ByVal contactName As String) Dim ultraGridExcelExporter1 As New UltraGridPrintDocument ultraGridExcelExporter1.Grid = grid1 ultraGridExcelExporter1.Page.BorderStyle = UIElementBorderStyle.None grid1.DisplayLayout.Rows.ExpandAll(True) ultraGridExcelExporter1.Header.TextLeft = "Share Holding Statement for " & contactName _ & ControlChars.CrLf & ControlChars.CrLf & "Date of Statement: " & DateTime.Today.ToLongDateString() ultraGridExcelExporter1.Header.Height = 80 ultraGridExcelExporter1.Header.Appearance.FontData.Bold = DefaultableBoolean.True ultraGridExcelExporter1.Header.Appearance.FontData.SizeInPoints = 12 ultraGridExcelExporter1.Print() End Sub
Hi Nathan,
I tried it out using the code you have here and it's working fine for me.
I had to make a couple of small changes to your code. First, you are re-hooking the InitializePrint event in the Finally block. I think you meant to unhook it there. Also, I changed it to show a PrintPreview, instead of printing, so I can test without wasting paper and ink.
I am attaching my sample here. If you run it and click the button, you can see there is no border around the page. If you comment out the code inside the InitializePrint, and try again, you get a border around the page.
Are you talking about some other border?
Hi Mike,
The problem appears to be the fact I'm using a style sheet in my project. When I add the same style sheet to your sample project, I get the border.
Could you tell me what I have to turn off in the style sheet? And why don't I get the same behaviour when I export it to a PDF using UltraGridDocumentExporter.
I've added the sample project with the style sheet.
I think I found it n the style sheet. If I remove the border from the GridControlArea then it prints out fine. Problem is the grids look silly within the app so they need the border. What can I do to override the style sheet at print time and keep the formatting for the app?
Application styling overrides the control's settings by default. So there's no property you can set in code that will JUST turn off that one property.
There are a number of options you could use here to get around it. But none of them are really great.
1) You could turn off AppStyling on the grid during the print operation. So that means doing something like this in the InitializePrint:
Private Sub grid_InitializePrint(sender As Object, e As CancelablePrintEventArgs) e.PrintLayout.Grid.UseAppStyling = False e.PrintLayout.BorderStyle = UIElementBorderStyle.NoneEnd Sub
But then you would need to turn it back on in some other event once the print is complete. So you would have to use some event on the UltraGridPrintDocument, like maybe EndPrint. You'd have to modify your code so that the EndPrint could somehow get a reference to the grid, though - your current sample doesn't really allow for this.
2) Another option would be to change the ResolutionOrder in your isl to ControlThenApplication so that the control settings override the isl settings. But this might have unintended consequences and there might be other properties of your grid or other controls that override isl settings that you don't really want to override. It's all or nothing.
Thanks for the quick response. Option 2 is a potential can of worms I think I'll steer well clear of.
I've turned off the app styling before print and turned it back on after and it works. Thank you very much.
That I didn't know! I'll bear it in mind for the future. Thanks again.
Okay... but just be aware, you can already modify the PrintLayout to hide columns, expand rows or make other adjustments to the print layout without affecting the on-screen grid. You don't NEED to create a new grid just for that stuff. The only thing the print layout can't do without affecting the on-screen grid, in this case, is override the Style Library. :)
I've decided to have a completely separate grid for the print. I'm going to create a class to generate the grid and form on the fly, remove the styling, print then dispose of it. I do need to hide and resize some columns for the printed version, as well as force the child bands to expand anyway so it's probably best for me to keep them separate
If the client wants any particular formatting then I'll apply it through code.
The only real potential down-side to that approach is:
A) The printed grid will lose all styling. So none of the colors or other styling applied to the on-screen grid will be included in the print.
B) If the grid on-screen paints for any reason during the print, it will lose it's styling temporarily. I think this is unlikely since the print is a synchronous operation, but I could be wrong and it's certainly something to keep in mind.