Hi,
the printing feature for listGrids seems to have a bug which appears in latest Chrome. It does not appear everytime... maybe out of 15 times printing 1 or 3 times. You can use my test code to reproduce this issue
The print export does not contain any data (see Screenshot - Print preview of chrome pop up).

The listGrid contains the following data:
Version: 6.1d from 29 may
used Browser: Chrome 58
the printing feature for listGrids seems to have a bug which appears in latest Chrome. It does not appear everytime... maybe out of 15 times printing 1 or 3 times. You can use my test code to reproduce this issue
The print export does not contain any data (see Screenshot - Print preview of chrome pop up).
The listGrid contains the following data:
Version: 6.1d from 29 may
used Browser: Chrome 58
Code:
import java.util.Date;
import java.util.LinkedHashMap;
import com.google.gwt.user.datepicker.client.CalendarUtil;
import com.smartgwt.client.data.Criteria;
import com.smartgwt.client.data.DataSource;
import com.smartgwt.client.data.Record;
import com.smartgwt.client.data.RecordList;
import com.smartgwt.client.data.fields.DataSourceBooleanField;
import com.smartgwt.client.data.fields.DataSourceDateField;
import com.smartgwt.client.data.fields.DataSourceFloatField;
import com.smartgwt.client.data.fields.DataSourceSequenceField;
import com.smartgwt.client.data.fields.DataSourceTextField;
import com.smartgwt.client.types.Alignment;
import com.smartgwt.client.types.AutoFitWidthApproach;
import com.smartgwt.client.types.FetchMode;
import com.smartgwt.client.types.FieldType;
import com.smartgwt.client.types.GroupStartOpen;
import com.smartgwt.client.types.Overflow;
import com.smartgwt.client.types.RecordDropAppearance;
import com.smartgwt.client.types.SummaryFunctionType;
import com.smartgwt.client.util.PrintHTMLCallback;
import com.smartgwt.client.util.PrintProperties;
import com.smartgwt.client.widgets.Canvas;
import com.smartgwt.client.widgets.HTMLPane;
import com.smartgwt.client.widgets.PrintCanvas;
import com.smartgwt.client.widgets.Window;
import com.smartgwt.client.widgets.events.ClickEvent;
import com.smartgwt.client.widgets.events.ClickHandler;
import com.smartgwt.client.widgets.form.DynamicForm;
import com.smartgwt.client.widgets.grid.ListGrid;
import com.smartgwt.client.widgets.grid.ListGridField;
import com.smartgwt.client.widgets.grid.ListGridRecord;
import com.smartgwt.client.widgets.layout.VLayout;
import com.smartgwt.client.widgets.toolbar.ToolStrip;
import com.smartgwt.client.widgets.toolbar.ToolStripButton;
import com.smartgwt.client.widgets.viewer.DetailViewer;
public class GTestGrid
{
private ListGrid listGrid;
private DynamicForm editorForm;
public GTestGrid()
{
initPopUp();
}
private void initPopUp()
{
initListGrid();
initEditorForm();
VLayout layout = new VLayout();
layout.setSize( "100%", "100%" );
layout.setMembers( editorForm, getToolBar(), listGrid );
layout.setOverflow( Overflow.HIDDEN );
Window window = new Window();
window.setOverflow( Overflow.HIDDEN );
window.setSize( "100%", "100%" );
window.setCanDragResize( true );
window.setShowMaximizeButton( true );
window.setShowMinimizeButton( true );
window.setShowCloseButton( false );
window.setAnimateMinimize( true );
window.setShowCloseButton( true );
window.setModalMaskOpacity( 50 );
window.setIsModal( true );
window.setShowModalMask( true );
window.centerInPage();
window.addItem( layout );
window.draw();
// listGrid.getResultSet().addDataChangedHandler( new DataChangedHandler()
// {
//
// @Override
// public void onDataChanged( DataChangedEvent event )
// {
// double totalAmount = 0;
//
// // Gets all records of the listGrid
// Record[] records = getAssignments();
//
// for ( int i = 0; i < records.length; i++ )
// {
// totalAmount = totalAmount + records[i].getAttributeAsDouble( CAssignedPaymentsRec.total_amount );
// }
// }
// } );
// add Records
addRecords( 2 );
}
private void initListGrid()
{
final DataSource dataSource = getDataSource();
listGrid = new ListGrid()
{
@Override
protected Canvas getCellHoverComponent( Record record, Integer rowNum, Integer colNum )
{
Criteria criteria = new Criteria();
criteria.addCriteria( dataSource.getPrimaryKeyFieldName(),
record.getAttribute( dataSource.getPrimaryKeyFieldName() ) );
DetailViewer viewer = new DetailViewer();
viewer.setEmptyCellValue( "---" );
viewer.setDataSource( dataSource );
viewer.setWrapValues( false );
viewer.setWrapLabel( false );
viewer.setShowShadow( true );
viewer.setShowEmptyField( false );
viewer.setShowHiddenFields( true );
viewer.setShowEmptyField( false );
viewer.setShowDetailFields( true );
viewer.fetchData( criteria );
return viewer;
}
};
listGrid.setMargin( 25 );
listGrid.setDataSource( dataSource );
listGrid.setAutoFetchData( true );
listGrid.setShowFilterEditor( true );
listGrid.setAllowFilterExpressions( true );
listGrid.setShowRowNumbers( true );
listGrid.setFastCellUpdates( true );
listGrid.setEmptyCellValue( "---" );
listGrid.setAllowFilterExpressions( true );
listGrid.setDataFetchMode( FetchMode.BASIC );
listGrid.setWrapHeaderTitles( true );
listGrid.setCanResizeFields( true );
listGrid.setCellPadding( 4 );
listGrid.setFixedRecordHeights( false );
listGrid.setGroupByMaxRecords( 1000 );
listGrid.setBodyOverflow( Overflow.AUTO );
listGrid.setOverflow( Overflow.AUTO );
listGrid.setLeaveScrollbarGap( false );
listGrid.setAutoFitWidthApproach( AutoFitWidthApproach.BOTH );
listGrid.setAutoFitHeaderHeights( true );
listGrid.setAutoSizeHeaderSpans( true );
listGrid.setCanAutoFitFields( false );
listGrid.setRecordDropAppearance( RecordDropAppearance.BOTH );
listGrid.setCanHover( true );
listGrid.setShowHover( true );
listGrid.setShowHoverComponents( true );
listGrid.setHoverDelay( 100 );
listGrid.setCanAddFormulaFields( true );
listGrid.setCanAddSummaryFields( true );
// Sets Columns
setColumns( listGrid );
}
private void setColumns( ListGrid listGrid )
{
ListGridField idField = new ListGridField( "id" );
idField.setWidth( "10%" );
idField.setAlign( Alignment.CENTER );
idField.setShowGroupSummary( false );
idField.setHidden( true );
idField.setCanEdit( false );
ListGridField descriptionField = new ListGridField( "description" );
descriptionField.setWidth( "60%" );
descriptionField.setCanEdit( false );
ListGridField netField = new ListGridField( "netAmount" );
netField.setSummaryFunction( SummaryFunctionType.SUM );
netField.setShowGroupSummary( true );
netField.setShowGridSummary( true );
netField.setWidth( "10%" );
netField.setAlign( Alignment.CENTER );
netField.setFormat( "#,###,##0.00" );
ListGridField taxField = new ListGridField( "taxAmount" );
taxField.setWidth( "10%" );
taxField.setSummaryFunction( SummaryFunctionType.SUM );
taxField.setShowGroupSummary( true );
taxField.setShowGridSummary( true );
taxField.setAlign( Alignment.CENTER );
taxField.setFormat( "#,###,##0.00" );
ListGridField grossField = new ListGridField( "grossAmoumnt" );
grossField.setSummaryFunction( SummaryFunctionType.SUM );
grossField.setShowGroupSummary( true );
grossField.setShowGridSummary( true );
grossField.setAlign( Alignment.CENTER );
grossField.setWidth( "10%" );
grossField.setFormat( "#,###,##0.00" );
ListGridField currencyField = new ListGridField( "currency" );
currencyField.setAlign( Alignment.CENTER );
currencyField.setWidth( "8%" );
currencyField.setCanEdit( false );
ListGridField dateField = new ListGridField( "date" );
dateField.setWidth( "15%" );
dateField.setAlign( Alignment.LEFT );
ListGridField paidField = new ListGridField( "paid", "Paid" );
listGrid.setFields( idField, descriptionField, netField, taxField, grossField, paidField, dateField );
// Group ListGrid
listGrid.setGroupByField( "currency" );
listGrid.setGroupStartOpen( GroupStartOpen.ALL );
listGrid.setShowGroupSummary( true );
listGrid.setShowGridSummary( true );
}
private DataSource getDataSource()
{
DataSource ds = new DataSource();
ds.setID( "payments" );
ds.setClientOnly( true );
DataSourceSequenceField idField = new DataSourceSequenceField( "id", "ID" );
idField.setPrimaryKey( true );
idField.setHidden( true );
DataSourceTextField descriptionField = new DataSourceTextField( "description", "Description" );
descriptionField.setRequired( true );
DataSourceFloatField netField = new DataSourceFloatField( "netAmount", "Net Amount" );
netField.setRequired( true );
netField.setDecimalPrecision( 2 );
netField.setDecimalPad( 2 );
netField.setType( FieldType.LOCALEFLOAT );
DataSourceFloatField taxField = new DataSourceFloatField( "taxAmount", "Tax Amount" );
taxField.setRequired( true );
taxField.setDecimalPrecision( 2 );
taxField.setDecimalPad( 2 );
taxField.setType( FieldType.LOCALEFLOAT );
DataSourceFloatField grossField = new DataSourceFloatField( "grossAmoumnt", "Gross Amount" );
grossField.setRequired( true );
grossField.setDecimalPrecision( 2 );
grossField.setDecimalPad( 2 );
grossField.setType( FieldType.LOCALEFLOAT );
DataSourceTextField currencyField = new DataSourceTextField( "currency", "Currency" );
currencyField.setValueMap( getCurrencys() );
currencyField.setRequired( true );
DataSourceBooleanField paidField = new DataSourceBooleanField( "paid", "Paid" );
DataSourceDateField dateField = new DataSourceDateField( "date", "Date" );
ds.setFields( idField, descriptionField, netField, taxField, grossField, currencyField, paidField, dateField );
return ds;
}
private void initEditorForm()
{
editorForm = new DynamicForm();
editorForm.setDataSource( listGrid.getDataSource() );
editorForm.setAutoFocus( true );
editorForm.setWidth100();
editorForm.setMargin( 25 );
editorForm.setUseAllDataSourceFields( true );
editorForm.editNewRecord();
}
private ToolStrip getToolBar()
{
ToolStrip toolbar = new ToolStrip();
toolbar.setWidth100();
ToolStripButton buttonAddToGrid = new ToolStripButton( "Add To Grid" );
buttonAddToGrid.addClickHandler( new ClickHandler()
{
public void onClick( ClickEvent event )
{
if ( editorForm.validate() == true )
{
editorForm.submit();
}
}
} );
ToolStripButton buttonNewRecord = new ToolStripButton( "New Record" );
buttonNewRecord.addClickHandler( new ClickHandler()
{
public void onClick( ClickEvent event )
{
editorForm.editNewRecord();
}
} );
ToolStripButton buttonPrint = new ToolStripButton( "<font color=\"red\">Print</font>" );
buttonPrint.addClickHandler( new ClickHandler()
{
@Override
public void onClick( ClickEvent event )
{
// Direct Print
PrintProperties prop = new PrintProperties();
prop.setPrintForExport( true );
String html = listGrid.getPrintHTML( prop, new PrintHTMLCallback()
{
@Override
public void setHTML( String html )
{
// workaround fix check boxes
html = html.replace( "Ebis/images/DynamicForm/unchecked.png", "Ebis/images/DynamicForm/cb-uncheck-normal_Disabled.png" );
html = html.replace( "Ebis/images/DynamicForm/unchecked_Disabled.png", "Ebis/images/DynamicForm/cb-uncheck-normal_Disabled.png" );
final HTMLPane htmlPane = new HTMLPane();
htmlPane.setContents( html );
PrintCanvas.printComponents( new Object[] { htmlPane } );
}
} );
System.out.println( html );
}
} );
toolbar.addButton( buttonNewRecord );
toolbar.addButton( buttonAddToGrid );
toolbar.addButton( buttonPrint );
return toolbar;
}
public Record[] getAssignments()
{
RecordList recordList = null;
if ( listGrid.isGrouped() )
{
recordList = listGrid.getOriginalRecordList();
}
else
{
recordList = listGrid.getResultSet();
}
Record[] result = (Record[]) recordList.toArray();
return result;
}
public LinkedHashMap<String, String> getCurrencys()
{
LinkedHashMap<String, String> items = new LinkedHashMap<String, String>();
items.put( "1", "EUR" );
items.put( "2", "GBP" );
items.put( "3", "CHF" );
items.put( "4", "SEK" );
items.put( "5", "DKK" );
items.put( "6", "PLN" );
items.put( "7", "BGN" );
items.put( "8", "CZK" );
items.put( "9", "HUF" );
items.put( "10", "HRK" );
items.put( "11", "RUB" );
items.put( "12", "RON" );
return items;
}
private void addRecords( int counter )
{
Date date = getFirstDayOfMonth( new Date() );
Date date2 = getFirstDayOfMonth( new Date() );
for ( int i = 0; i < counter; i++ )
{
ListGridRecord record = new ListGridRecord();
record.setAttribute( "id", 1 + i );
record.setAttribute( "description", "Test " + 1 + i );
record.setAttribute( "netAmount", new Double( 1000 + i ) );
record.setAttribute( "taxAmount", new Double( 0 ) );
record.setAttribute( "grossAmoumnt", new Double( 1000 + i ) );
record.setAttribute( "currency", "1" );
record.setAttribute( "paid", "true" );
CalendarUtil.addDaysToDate( date, 1 );
record.setAttribute( "date", date );
listGrid.addData( record );
}
for ( int i = 0; i < counter; i++ )
{
ListGridRecord record = new ListGridRecord();
record.setAttribute( "id", ( ( counter + 1 ) + i ) );
record.setAttribute( "description", "Test " + 1 + i );
record.setAttribute( "netAmount", new Double( 1 + i ) );
record.setAttribute( "taxAmount", new Double( 0 ) );
record.setAttribute( "grossAmoumnt", new Double( 1 + i ) );
record.setAttribute( "currency", "1" );
CalendarUtil.addDaysToDate( date2, 1 );
record.setAttribute( "date", date2 );
listGrid.addData( record );
}
}
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
/**
* Returns the first day of the current month
*/
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
public static Date getFirstDayOfMonth( Date date )
{
CalendarUtil.resetTime( date );
CalendarUtil.setToFirstDayOfMonth( date );
return date;
}
}
Comment