Bug 102511 Enhance Highlighting to support Banding
Using the highlight feature to create a banded report results in a messy report. To recreate, create a simple tabular report. In the designer, select the detail row, go to the Highlights tab on the Property Editor view. Add a new highlight, set its condition to be "row[0] % 2" "Equals" "0". Set the formatting for the highlight to have a gray background color. When the report is previewed, alternating rows have a background color for each cell. The issue is that the backgrounds for the cells are not contiguous, there are spaces between each cell's background, and if a cell has a null value there is no background color. In this situation the highlight should apply to the row, instead it is being applied to each cell. If I manually set the background of a detail row to be gray I get the effect I want.
engine/org.eclipse.birt.report.engine/src/org/eclipse/birt/report/engine/parser/EngineIRVisitor.java
scalarParameter.setAllowNull( handle.allowNull( ) );
		String controlType = handle.getControlType( );
		if ( DesignChoiceConstants.PARAM_CONTROL_CHECK_BOX.equals( controlType ) )
			scalarParameter.setControlType( IScalarParameterDefn.CHECK_BOX );
		else if ( DesignChoiceConstants.PARAM_CONTROL_LIST_BOX
				.equals( controlType ) )
			scalarParameter.setControlType( IScalarParameterDefn.LIST_BOX );
		else if ( DesignChoiceConstants.PARAM_CONTROL_RADIO_BUTTON
				.equals( controlType ) )
			scalarParameter.setControlType( IScalarParameterDefn.RADIO_BUTTON );
		else
			scalarParameter.setControlType( IScalarParameterDefn.TEXT_BOX );
		scalarParameter.setDefaultValue( handle.getDefaultValue( ) );
		scalarParameter.setDisplayName( handle.getDisplayName( ) );
		scalarParameter.setDisplayNameKey( handle.getDisplayNameKey( ) );
		scalarParameter.setFormat( handle.getFormat( ) );
		scalarParameter.setHelpText( handle.getHelpText( ) );
		scalarParameter.setHelpTextKey( handle.getHelpTextKey( ) );
		scalarParameter.setPromptText( handle.getPromptText( ) );
		scalarParameter.setIsHidden( handle.isHidden( ) );
		scalarParameter.setName( handle.getName( ) );
		String valueType = handle.getDataType( );
		if ( DesignChoiceConstants.PARAM_TYPE_BOOLEAN.equals( valueType ) )
			scalarParameter.setDataType( IScalarParameterDefn.TYPE_BOOLEAN );
		else if ( DesignChoiceConstants.PARAM_TYPE_DATETIME.equals( valueType ) )
			scalarParameter.setDataType( IScalarParameterDefn.TYPE_DATE_TIME );
		else if ( DesignChoiceConstants.PARAM_TYPE_DECIMAL.equals( valueType ) )
			scalarParameter.setDataType( IScalarParameterDefn.TYPE_DECIMAL );
		else if ( DesignChoiceConstants.PARAM_TYPE_FLOAT.equals( valueType ) )
			scalarParameter.setDataType( IScalarParameterDefn.TYPE_FLOAT );