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,
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.
Hi Mike,
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.
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.
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.
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. :)
That I didn't know! I'll bear it in mind for the future. Thanks again.