Изменить фильтр столбцов сетки в SmartGWT - PullRequest
1 голос
/ 24 октября 2011

Если вы создаете пользовательский Источник данных в SmartGWT, возможно ли удалить фильтр поля вместо того, чтобы полностью скрывать его от столбцов сетки?

Как видно здесь:

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...
    }

}

Как этого достичь в ListGrid с указанным выше источником данных?

1 Ответ

1 голос
/ 25 октября 2011

Я не уверен, что полностью понял вопрос.

Вы ищете способ скрыть параметр "Код страны" в контекстном меню Столбцы ? Вы можете сделать это, объявив 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);

EDIT:

Итак, не устанавливайте скрытый атрибут в источнике данных, а вместо этого непосредственно к ListGridField.

DataSource

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);

Это должно сработать.

...