Quantcast
Channel: SmartClient Forums
Viewing all articles
Browse latest Browse all 4756

BUG: Filtering a grid after a column is shown, causes the grid to loose its criteria.

$
0
0
I found a bug on the latest nightly build.
I am currently using: SmartClient Version: v10.0p_2015-05-25/LGPL Development Only (built 2015-05-25), but I was able to reproduce it with the build from (2015-06-11)

If we have a ListGrid with an initialCriteria, I expect that this criteria will be kept when I'm filtering the grid.
Everything works as expected just until I show a column that is not originally shown when the grid is drawn.

Example:
Code:

package org.test.client;

import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.user.client.ui.RootPanel;
import com.smartgwt.client.data.DataSource;
import com.smartgwt.client.data.fields.DataSourceTextField;
import com.smartgwt.client.data.AdvancedCriteria;
import com.smartgwt.client.data.Criterion;
import com.smartgwt.client.types.OperatorId;
import com.smartgwt.client.util.SC;
import com.smartgwt.client.widgets.grid.ListGrid;
import com.smartgwt.client.widgets.grid.events.FilterEditorSubmitEvent;
import com.smartgwt.client.widgets.grid.events.FilterEditorSubmitHandler;


public class MainEntryPoint implements EntryPoint {

    @Override
    public void onModuleLoad() {

        ListGrid grid = new ListGrid();
        grid.setShowFilterEditor(true);
        grid.setWidth100();
        grid.setHeight100();
        grid.addFilterEditorSubmitHandler(new FilterEditorSubmitHandler() {

            @Override
            public void onFilterEditorSubmit(FilterEditorSubmitEvent event) {
                SC.logWarn("event.getCriteria(): " + event.getCriteria().getValues());
            }
        });

        DataSourceTextField f1 = new DataSourceTextField("f1", "Field 1");
        f1.setCanFilter(true);
        DataSourceTextField f2 = new DataSourceTextField("f2", "Field 2");
        f2.setCanFilter(true);
        DataSourceTextField f3 = new DataSourceTextField("f3", "Field 3");
        f3.setCanFilter(true);
        f3.setDetail(true);

        DataSource datasource = new DataSource();
        datasource.setClientOnly(true);
        datasource.setFields(f1, f2, f3);
        grid.setDataSource(datasource);

        grid.fetchData(new AdvancedCriteria(OperatorId.AND, new Criterion[]{new Criterion("f1", OperatorId.EQUALS, 1)}));

        RootPanel.get().add(grid);
    }
}

The following example is not showing any data, because I am trying to keep the example as simple as possible. The only issue is the filtering after the field 3 is shown.

1) Because initially a grid.fetch is made, so the base criteria is set up:
Code:

grid.fetchData(new AdvancedCriteria(OperatorId.AND, new Criterion[]{new Criterion("f1", OperatorId.EQUALS, 1)}));
2) If I filter the field 1 with a value = 6, this is the result:
"event.getCriteria(): {operator=and, criteria=[{fieldName=f1, operator=equals, value=1}, {fieldName=f1, operator=iContains, value=6}], _constructor=AdvancedCriteria}"
3) If I add another filter on filed 2 with value = 7:
"event.getCriteria(): {operator=and, criteria=[{fieldName=f1, operator=equals, value=1}, {fieldName=f1, operator=iContains, value=6}, {fieldName=f2, operator=iContains, value=7}], _constructor=AdvancedCriteria}"
4) Now if I show the field f3 and filter field 3 with value = 8:
"event.getCriteria(): {f1=6, f2=7, f3=8}". This criteria is bogus and should not destroy the original criteria applied on the grid.

Isomorphic, please advise if I am missing some property that I have not set or it is an unexpected behavior.

System Details:
Windows 7 64 bit.
Browser: Chrome, IE11, maybe others.
GWT 2.7, Smartgwt 5.0.
SmartClient Version: v10.0p_2015-05-25/LGPL Development Only (built 2015-05-25).

Viewing all articles
Browse latest Browse all 4756

Trending Articles