Search code examples
gwtgxt

GXT 3.1.0 - Sorting dropdown missing from Grid Header


The code below creates 2 tabs. Each tab has a grid with 1 column. In the first tab the table header displays the dropdown with hide/show columns and sort. In the second tab the dropdown is missing from the table header.

What am I doing wrong? Thanks

public void onModuleLoad()
{
    Grid table1 = createTable();
    Grid table2 = createTable();

    TabPanel tabPanel = new TabPanel();
    tabPanel.add(table1, "Grid 1");
    tabPanel.add(table2, "Grid 2");

    RootLayoutPanel.get().add(tabPanel);
}

Grid createTable()
{
    ColumnConfig<HashMap, String> nameCol = new ColumnConfig<HashMap, String>(

    new ValueProvider<HashMap, String>()
    {
        @Override
        public String getValue(HashMap object)
        {
            return (String) object.get("COL1");
        }

        @Override
        public void setValue(HashMap object, String value)
        {
            object.put("COL1", value);
        }

        @Override
        public String getPath()
        {
            // TODO Auto-generated method stub
            return "1";
        }

    }, 200, SafeHtmlUtils.fromTrustedString("<b>Column 1</b>"));

    List<ColumnConfig<HashMap, ?>> l = new ArrayList<ColumnConfig<HashMap, ?>>();
    l.add(nameCol);
    ColumnModel<HashMap> cm = new ColumnModel<HashMap>(l);

    ModelKeyProvider<HashMap> modelKeyProvider = new ModelKeyProvider<HashMap>()
    {
        @Override
        public String getKey(HashMap item)
        {
            return (String) item.get("COL1");
        }
    };

    ListStore<HashMap> store = new ListStore<HashMap>(modelKeyProvider);
    store.addAll(getStocks());

    Grid table = new Grid(store, cm);

    return table;
}

public static List<HashMap> getStocks()
{
    List<HashMap> stocks = new ArrayList<HashMap>();

    for (int i = 0; i < 1000; i++)
    {
        HashMap hashMap = new HashMap();
        hashMap.put("COL1", "Line: " + i);

        stocks.add(hashMap);
    }
    return stocks;
}

Solution

  • Looks like that the little button with the dropdown has 0 height. It must be because it's inside a tab that is not visible.

    Refreshing the header solves this.

    TabPanel tabPanel = new TabPanel();
    tabPanel.addSelectionHandler(new SelectionHandler<Widget>()
    {
        @Override
        public void onSelection(SelectionEvent<Widget> event)
        {
            if(table1.getView() != null && table1.getView().getHeader() != null)
                table1.getView().getHeader().refresh();
        }
    });