Go Back   SmartClient Forums > Smart GWT Technical Q&A
Wiki Register Search Today's Posts Mark Forums Read

Reply
 
Thread Tools Search this Thread
  #1  
Old 2nd Nov 2009, 02:41
michalg michalg is offline
Registered Developer
 
Join Date: Nov 2008
Posts: 186
Default FilterBuilder & ComboBoxItem

Hi,

Docs says that FilterBuilder is using editor type according to the Datasource type. I explicitly set field.setEditorType to ComboBoxItem as in code below.
What I want is a drop down list of already entered values in the "continent" field.
Although this works in grid row editing mode and in grid filter, it does not work in FilterBuilder.
When choosing "continent" field in the FilterBuilder type of value is changed to the ComboBox but drop down list is empty.
Does FilterBuilder support ComboBoxItem filled by this.DataSource ?
Code:
/*
 * MainEntryPoint.java
 *
 * Created on 1 październik 2009, 17:12
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package org.yournamehere.client;

import com.google.gwt.core.client.EntryPoint;
import com.smartgwt.client.data.DataSource;
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.DataSourceIntegerField;
import com.smartgwt.client.data.fields.DataSourceTextField;
import com.smartgwt.client.types.DSDataFormat;
import com.smartgwt.client.types.ListGridEditEvent;
import com.smartgwt.client.widgets.form.FilterBuilder;
import com.smartgwt.client.widgets.form.fields.ComboBoxItem;
import com.smartgwt.client.widgets.grid.ListGrid;
import com.smartgwt.client.widgets.layout.VLayout;

/**
 *
 * @author michalg
 */
public class MainEntryPoint implements EntryPoint {
   
    /** Creates a new instance of MainEntryPoint */
    public MainEntryPoint() {
    }
   
    /**
     * The entry point method, called automatically by loading a module
     * that declares an implementing class as an entry-point
     */
    public void onModuleLoad() {

        DataSource ds = new DataSource();
        ds.setDataFormat(DSDataFormat.XML);
        ds.setRecordXPath("/List/country");
        ds.setDataURL("data.xml");

        DataSourceIntegerField pkField = new DataSourceIntegerField("pk");
        pkField.setHidden(true);
        pkField.setPrimaryKey(true);

        DataSourceTextField countryCodeField = new DataSourceTextField("countryCode", "Code");
        countryCodeField.setRequired(true);

        DataSourceTextField countryNameField = new DataSourceTextField("countryName", "Country");
        countryNameField.setRequired(true);

        DataSourceTextField capitalField = new DataSourceTextField("capital", "Capital");
        DataSourceTextField governmentField = new DataSourceTextField("government", "Government", 500);

        DataSourceBooleanField memberG8Field = new DataSourceBooleanField("member_g8", "G8");

        DataSourceTextField continentField = new DataSourceTextField("continent", "Continent");
        //continentField.setValueMap("Europe", "Asia", "North America", "Australia/Oceania", "South America", "Africa");
        ComboBoxItem comboBoxItem = new ComboBoxItem("continent");
        continentField.setEditorType(comboBoxItem);

        DataSourceDateField independenceField = new DataSourceDateField("independence", "Nationhood");
        DataSourceFloatField areaField = new DataSourceFloatField("area", "Area (km²)");
        DataSourceIntegerField populationField = new DataSourceIntegerField("population", "Population");
        DataSourceFloatField gdpField = new DataSourceFloatField("gdp", "GDP ($M)");

        ds.setFields(pkField, countryCodeField, countryNameField, capitalField, governmentField,
                memberG8Field, continentField, independenceField, areaField, populationField,
                gdpField);

       
        FilterBuilder filterBuilder = new FilterBuilder();
        filterBuilder.setDataSource(ds);

        ListGrid grid = new ListGrid();
        grid.setDataSource(ds);
        grid.setAutoFetchData(true);
        grid.setWidth(550);
        grid.setHeight(224);
        grid.setCanEdit(true);
        grid.setEditEvent(ListGridEditEvent.DOUBLECLICK);

        VLayout main = new VLayout();
        main.addMember(filterBuilder);
        main.addMember(grid);
        main.draw();
    }
   
}
Reply With Quote
  #2  
Old 2nd Nov 2009, 08:56
Isomorphic Isomorphic is offline
Administrator
 
Join Date: May 2006
Posts: 30,561
Default

Explicitly set optionDataSource. Using the surrounding form's DataSource as an optionDataSource is a default behavior for forms but not FilterBuilder.
Reply With Quote
  #3  
Old 3rd Nov 2009, 00:30
michalg michalg is offline
Registered Developer
 
Join Date: Nov 2008
Posts: 186
Default

Setting optionDataSource explicity before ds.setFields() (as in following code) causes an error:
Error: Fields cannot be added to a DataSource after the underlying component has been created.
Code:
    public void onModuleLoad() {

        DataSource ds = new DataSource();
        ds.setDataFormat(DSDataFormat.XML);
        ds.setRecordXPath("/List/country");
        ds.setDataURL("data.xml");

        DataSourceIntegerField pkField = new DataSourceIntegerField("pk");
        pkField.setHidden(true);
        pkField.setPrimaryKey(true);

        DataSourceTextField countryCodeField = new DataSourceTextField("countryCode", "Code");
        countryCodeField.setRequired(true);

        DataSourceTextField countryNameField = new DataSourceTextField("countryName", "Country");
        countryNameField.setRequired(true);

        DataSourceTextField capitalField = new DataSourceTextField("capital", "Capital");
        DataSourceTextField governmentField = new DataSourceTextField("government", "Government", 500);

        DataSourceBooleanField memberG8Field = new DataSourceBooleanField("member_g8", "G8");

        DataSourceTextField continentField = new DataSourceTextField("continent", "Continent");
        //continentField.setValueMap("Europe", "Asia", "North America", "Australia/Oceania", "South America", "Africa");
        ComboBoxItem comboBoxItem = new ComboBoxItem("continent");
        comboBoxItem.setOptionDataSource(ds);
        continentField.setEditorType(comboBoxItem);

        DataSourceDateField independenceField = new DataSourceDateField("independence", "Nationhood");
        DataSourceFloatField areaField = new DataSourceFloatField("area", "Area (km²)");
        DataSourceIntegerField populationField = new DataSourceIntegerField("population", "Population");
        DataSourceFloatField gdpField = new DataSourceFloatField("gdp", "GDP ($M)");

        ds.setFields(pkField, countryCodeField, countryNameField, capitalField, governmentField,
                memberG8Field, continentField, independenceField, areaField, populationField,
                gdpField);

       
        FilterBuilder filterBuilder = new FilterBuilder();
        filterBuilder.setDataSource(ds);

        ListGrid grid = new ListGrid();
        grid.setDataSource(ds);
        grid.setAutoFetchData(true);
        grid.setWidth(550);
        grid.setHeight(224);
        grid.setCanEdit(true);
        grid.setEditEvent(ListGridEditEvent.DOUBLECLICK);

        VLayout main = new VLayout();
        main.addMember(filterBuilder);
        main.addMember(grid);
        main.draw();
    }
Setting optionDataSource after ds.setFields does not change anything - still no drop down options in FilterBuilder continent field.
Code:
    public void onModuleLoad() {

        DataSource ds = new DataSource();
        ds.setDataFormat(DSDataFormat.XML);
        ds.setRecordXPath("/List/country");
        ds.setDataURL("data.xml");

        DataSourceIntegerField pkField = new DataSourceIntegerField("pk");
        pkField.setHidden(true);
        pkField.setPrimaryKey(true);

        DataSourceTextField countryCodeField = new DataSourceTextField("countryCode", "Code");
        countryCodeField.setRequired(true);

        DataSourceTextField countryNameField = new DataSourceTextField("countryName", "Country");
        countryNameField.setRequired(true);

        DataSourceTextField capitalField = new DataSourceTextField("capital", "Capital");
        DataSourceTextField governmentField = new DataSourceTextField("government", "Government", 500);

        DataSourceBooleanField memberG8Field = new DataSourceBooleanField("member_g8", "G8");

        DataSourceTextField continentField = new DataSourceTextField("continent", "Continent");
        //continentField.setValueMap("Europe", "Asia", "North America", "Australia/Oceania", "South America", "Africa");
        ComboBoxItem comboBoxItem = new ComboBoxItem("continent");
        continentField.setEditorType(comboBoxItem);

        DataSourceDateField independenceField = new DataSourceDateField("independence", "Nationhood");
        DataSourceFloatField areaField = new DataSourceFloatField("area", "Area (km²)");
        DataSourceIntegerField populationField = new DataSourceIntegerField("population", "Population");
        DataSourceFloatField gdpField = new DataSourceFloatField("gdp", "GDP ($M)");

        ds.setFields(pkField, countryCodeField, countryNameField, capitalField, governmentField,
                memberG8Field, continentField, independenceField, areaField, populationField,
                gdpField);

        comboBoxItem.setOptionDataSource(ds);
       
        FilterBuilder filterBuilder = new FilterBuilder();
        filterBuilder.setDataSource(ds);

        ListGrid grid = new ListGrid();
        grid.setDataSource(ds);
        grid.setAutoFetchData(true);
        grid.setWidth(550);
        grid.setHeight(224);
        grid.setCanEdit(true);
        grid.setEditEvent(ListGridEditEvent.DOUBLECLICK);

        VLayout main = new VLayout();
        main.addMember(filterBuilder);
        main.addMember(grid);
        main.draw();
    }
Reply With Quote
  #4  
Old 3rd Nov 2009, 23:37
michalg michalg is offline
Registered Developer
 
Join Date: Nov 2008
Posts: 186
Default

Can anyone managed to have ComboBoxItem with OptionDataSource set in FilterBuilder working ?
Thanks,
MichalG
Reply With Quote
  #5  
Old 6th Nov 2009, 03:58
michalg michalg is offline
Registered Developer
 
Join Date: Nov 2008
Posts: 186
Default Anybody ?

Anybody ?
Is OptionDataSource in the FilterBuilder field possible ?
I only managed to make drop-down working with ValueMap in FilterBuilder.
Please help.
MichalG
Reply With Quote
  #6  
Old 22nd Apr 2010, 00:45
gvangass gvangass is offline
Registered Developer
 
Join Date: Oct 2009
Posts: 22
Default A solution

Add this code to your datasource class (in my case it was the user datasource)
Code:
final DataSourceIntegerField office = new DataSourceIntegerField("officeId", "Office Location");
office.setEditorType(new ComboBoxItem());
OfficeDS.getInstance().fetchData(null, new DSCallback(){
    @Override
    public void execute(DSResponse response, Object rawData, DSRequest request) {
        office.setValueMap(response.getDataAsRecordList().getValueMap("id", "name"));
}});
Reply With Quote
  #7  
Old 22nd Apr 2010, 01:11
michalg michalg is offline
Registered Developer
 
Join Date: Nov 2008
Posts: 186
Default

Already fixed in trunk:
http://code.google.com/p/smartgwt/issues/detail?id=376
But thanks,
MichalG
Reply With Quote
Reply


Thread Tools Search this Thread
Search this Thread:

Advanced Search


© 2010,2011 Isomorphic Software. All Rights Reserved