更改SmartGWT中的网格列过滤器

时间:2011-10-24 08:24:05

标签: gwt smartgwt

如果您在SmartGWT中创建自定义DataSource,是否可以删除字段过滤器而不是将其完全隐藏在网格列中?

如下所示:

enter image description here

国家/地区代码字段存在,但在上图中隐藏

澄清:我想在开始时隐藏国家/地区代码字段,但仍然可以在上下文菜单中看到它。如果您使用setHidden(true),该字段将从上方的菜单中消失。

示例代码:

public class MyDataSource extends DataSource {

    public MyDataSource() {
        DataSourceField countryField = new DataSourceIntegerField("country", "Country code");
        // TODO Find a method that disables the filter, aka hides but not removes the field from the grid.
        countryField.setHidden(true); // Completely hides/removes the field, not desireable.
        countryField.setCanFilter(true); // Doesn't seem to change anything. 
        addField(countryField);

        // Other fields...
    }

}

如何在具有上述DataSource的ListGrid中实现这一目标?

1 个答案:

答案 0 :(得分:1)

我不确定我是否完全理解这个问题。

您是否正在寻找 隐藏 Columns 上下文菜单中“国家/地区代码”选项的方法?你可以通过声明来做到这一点 ListGridField.setCanHide(false)到相应的ListGridField。

ListGridField countryCode = new ListGridField("countryCode");
countryCode.setHidden(true);
countryCode.setCanHide(false); // won't be shown in the context menu

或者,您是否尝试停用 过滤

如果是这样,用户在某些情况下是否必须选择查看国家/地区代码列? 如果没有,您可以保持MyDataSource不变,只定义您希望用户看到的ListGridFields

ListGrid grid = new ListGrid();
ListGridField country = new ListGridField("country");
ListGridField capital = new ListGridField("capital");
ListGridField continent = new ListGridField("continent");
// no countryCode here
grid.setFields(country, capital, continent);

基础国家/地区代码属性仍可在代码中使用,例如。通过record.getAttribute("countryCode");,它只是没有显示在ListGrid中。

或者,您可以使用ListGridField.canFilter(Boolean canFilter)在网格级别定义过滤。

ListGridField countryCode = new ListGridField("countryCode ");
countryCode.setCanFilter(false);

修改

因此,不要在数据源中设置隐藏属性,而是直接设置为ListGridField

数据源

public class MyDataSource extends DataSource {

  public MyDataSource() {
    DataSourceField countryCode = new DataSourceStringField("countryCode", "Country code");
    DataSourceField country = new DataSourceStringField("country", "Country");
    DataSourceField capital = new DataSourceStringField("capital", "Capital");
    DataSourceField continent = new DataSourceStringField("continent", "Continent");

    setFields(countryCode, country, capital, continent);
  }
}

ListGrid

ListGrid grid = new ListGrid();
ListGridField countryCode = new ListGridField("countryCode");
countryCode.setHidden(true);
countryCode.setCanHide(true); // I don't think this is even necessary.
ListGridField country = new ListGridField("country");
ListGridField capital = new ListGridField("capital");
ListGridField continent = new ListGridField("continent");
grid.setFields(countryCode, country, capital, continent);

这应该可以解决问题。