Hi,
If you want to use a language from one locale (in my case English) in combination with formatting rules from another locale (in my case German/Europen)... you can use NumberUtil.setDecimalSymbol( "," ); and NumberUtil.setGroupingSymbol( "." ) (e.g. for German/European format rules, Doc => https://www.smartclient.com/smartgwt...umberUtil.html).
This is working perfect for DynamicForms. But ListGrids are ignoring those settings (see screenshot). Furthermore you can not edit values in listGrids (listGrid.setCanEdit(true); with the german number notation...only english notation is working.
Used Build: https://www.smartclient.com/builds/S...GPL/2016-08-23
Thanks
Andy
Screenshot with settings umberUtil.setDecimalSymbol( "," ); NumberUtil.setGroupingSymbol( "." ) ;):

You can use the following test case:
If you want to use a language from one locale (in my case English) in combination with formatting rules from another locale (in my case German/Europen)... you can use NumberUtil.setDecimalSymbol( "," ); and NumberUtil.setGroupingSymbol( "." ) (e.g. for German/European format rules, Doc => https://www.smartclient.com/smartgwt...umberUtil.html).
This is working perfect for DynamicForms. But ListGrids are ignoring those settings (see screenshot). Furthermore you can not edit values in listGrids (listGrid.setCanEdit(true); with the german number notation...only english notation is working.
Used Build: https://www.smartclient.com/builds/S...GPL/2016-08-23
Thanks
Andy
Screenshot with settings umberUtil.setDecimalSymbol( "," ); NumberUtil.setGroupingSymbol( "." ) ;):
You can use the following test case:
Code:
import java.util.Date;
import java.util.LinkedHashMap;
import com.google.gwt.i18n.client.NumberFormat;
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.events.DataChangedEvent;
import com.smartgwt.client.data.events.DataChangedHandler;
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.GroupStartOpen;
import com.smartgwt.client.types.ListGridEditEvent;
import com.smartgwt.client.types.Overflow;
import com.smartgwt.client.types.RecordDropAppearance;
import com.smartgwt.client.types.SummaryFunctionType;
import com.smartgwt.client.util.NumberUtil;
import com.smartgwt.client.widgets.Canvas;
import com.smartgwt.client.widgets.Window;
import com.smartgwt.client.widgets.grid.CellFormatter;
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.grid.events.EditorExitEvent;
import com.smartgwt.client.widgets.grid.events.EditorExitHandler;
import com.smartgwt.client.widgets.layout.VLayout;
import com.smartgwt.client.widgets.viewer.DetailViewer;
public class GTestGrid2
{
private ListGrid listGrid;
public GTestGrid2()
{
// sets Number Seperators
NumberUtil.setDecimalSymbol( "," );
NumberUtil.setGroupingSymbol( "." );
initPopUp();
}
private void initPopUp()
{
initListGrid();
VLayout layout = new VLayout();
layout.setSize( "100%", "100%" );
layout.setMembers( listGrid );
layout.setOverflow( Overflow.HIDDEN );
Window window = new Window();
window.setOverflow( Overflow.HIDDEN );
window.setShowShadow( true );
window.setShadowSoftness( 10 );
window.setShadowOffset( 5 );
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( 10 );
}
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.setCanEdit( true );
listGrid.setEditEvent( ListGridEditEvent.CLICK );
listGrid.addEditorExitHandler( new EditorExitHandler()
{
@Override
public void onEditorExit( EditorExitEvent event )
{
listGrid.validateRow( event.getRowNum() );
}
} );
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.setCellFormatter( new CellFormatter()
{
public String format( Object value, ListGridRecord record, int rowNum, int colNum )
{
if ( value == null )
return null;
try
{
NumberFormat fmt = NumberFormat.getFormat( "#,###,##0.00" );
return fmt.format( Double.valueOf( String.valueOf( value ) ) );
}
catch ( Exception e )
{
System.out.println( "Double: " + value.toString() );
return value.toString();
}
}
} );
ListGridField taxField = new ListGridField( "taxAmount" );
taxField.setWidth( "10%" );
taxField.setSummaryFunction( SummaryFunctionType.SUM );
taxField.setShowGroupSummary( true );
taxField.setShowGridSummary( true );
taxField.setAlign( Alignment.CENTER );
taxField.setCellFormatter( new CellFormatter()
{
public String format( Object value, ListGridRecord record, int rowNum, int colNum )
{
if ( value == null )
return null;
try
{
NumberFormat fmt = NumberFormat.getFormat( "#,###,##0.00" );
return fmt.format( Double.valueOf( String.valueOf( value ) ) );
}
catch ( Exception e )
{
System.out.println( "Double: " + value.toString() );
return value.toString();
}
}
} );
ListGridField grossField = new ListGridField( "grossAmoumnt" );
grossField.setSummaryFunction( SummaryFunctionType.SUM );
grossField.setShowGroupSummary( true );
grossField.setShowGridSummary( true );
grossField.setAlign( Alignment.CENTER );
grossField.setWidth( "10%" );
grossField.setCellFormatter( new CellFormatter()
{
public String format( Object value, ListGridRecord record, int rowNum, int colNum )
{
if ( value == null )
return null;
try
{
NumberFormat fmt = NumberFormat.getFormat( "#,###,##0.00" );
return fmt.format( Double.valueOf( String.valueOf( value ) ) );
}
catch ( Exception e )
{
System.out.println( "Double: " + value.toString() );
return value.toString();
}
}
} );
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 );
listGrid.setFields( idField, descriptionField, netField, taxField, grossField, 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 );
DataSourceFloatField taxField = new DataSourceFloatField( "taxAmount", "Tax Amount" );
taxField.setRequired( true );
taxField.setDecimalPrecision( 2 );
taxField.setDecimalPad( 2 );
DataSourceFloatField grossField = new DataSourceFloatField( "grossAmoumnt", "Gross Amount" );
grossField.setRequired( true );
grossField.setDecimalPrecision( 2 );
grossField.setDecimalPad( 2 );
DataSourceTextField currencyField = new DataSourceTextField( "currency", "Currency" );
currencyField.setValueMap( getCurrencys() );
currencyField.setRequired( true );
DataSourceDateField dateField = new DataSourceDateField( "date", "Date" );
ds.setFields( idField, descriptionField, netField, taxField, grossField, currencyField, dateField );
return ds;
}
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" );
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