Как заполнить GWT DataGrid?

1

Я создал DataGrid так:

DataGrid<String> grid = new DataGrid<String>();
                grid.setPageSize(4);

                TextColumn<String> date = new TextColumn<String>() {
                    public String getValue(String object) {
                        return object;
                    }
                };
                grid.addColumn(date, "Date");

                TextColumn<String> time = new TextColumn<String>() {
                    public String getValue(String object) {
                        return object;
                    }
                };
                grid.addColumn(time, "Time");

                TextColumn<String> number = new TextColumn<String>() {
                    public String getValue(String object) {
                        return object;
                    }
                };
                grid.addColumn(number, "Number");

Теперь я хотел бы заполнить его, но я не понял, как это сделать, потому что у меня есть эта String[] и они также должны быть разделены:

textString[1]="01/01/2014;10:00;300";
textString[2]="02/02/2014;11:00;400"; ...

Заранее спасибо.

UPDATE @Sturmination Я выполнил ваш намек, но есть еще одна проблема для этого кода (при условии, что выполняется разделение):

..
protected static List<Example> EXAMPLES = null;
..

public void method() {
...
EXAMPLES = Arrays.asList(new Example("01/01/2014", "10:00", "300"));
grid.setRowCount(EXAMPLES.size(), true);
grid.setRowData(0, EXAMPLES);
..
}

Он возвращает эту ошибку:

The method setRowData(int, List<? extends String>) in the type AbstractHasData<String> is not applicable for the arguments (int, List<Example>)

И это предлагает: Change type of EXAMPLES to List<? extends String> Change type of EXAMPLES to List<? extends String> но он все равно не работает.

Теги:
datagrid
gwt

3 ответа

2

Вы пробовали это:

DataGrid<String> grid = new DataGrid<String>();
grid.setPageSize(4);

TextColumn<String> date = new TextColumn<String>() {
    public String getValue(String object) {
        return object.split(';')[0];
    }
};
grid.addColumn(date, "Date");

TextColumn<String> time = new TextColumn<String>() {
    public String getValue(String object) {
        return object.split(';')[1];
    }
};
grid.addColumn(time, "Time");

TextColumn<String> number = new TextColumn<String>() {
    public String getValue(String object) {
        return object.split(';')[2];
    }
};
grid.addColumn(number, "Number");

Лучше всего было бы создать новый Java Bean для ваших строк и преобразовать элементы String[] в List<Row> для новых объектов строки

  • 0
    Это работает, но неэффективно многократно вызывать split .
  • 0
    Я обновил свой вопрос @ Sturmination.
Показать ещё 5 комментариев
1

Я бы сделал это так, если размер ваших данных не огромен.

Создать класс

Class YourClass{    
  private String date, time, number;
  public YourClass(String date, String time, String nuber){
    this.date=date;
    this.time=time;
    this.number=number;
  }
  //getters and setters here
}

Создайте метод для преобразования значений

private List<YourObject> convert(String[] values){
  List<YourClass> data= new ArrayList<YourClass>();
  String date, time, number; 
  for(i=0; values.size(); i++){

    values[i] //split the string and asign values to date, time and number
    dataList.add(new YourClass(date, time, number));
  }
  return dataList;
}

Добавьте значения в DataGrid

ListDataProvider<YourClass> provider= new ListDataProvider<YourClass>();
List<YourClass> dataList = new ArrayList<YourClass>();
dataList.addAll(convert(textString[]));
provider.addDataDisplay(grid);
provider.setList(dataList);

Тогда в ваших столбцах просто:

return object.getDate();
return object.getTime();
return object.getNumber();
1

Вы можете использовать String[] в вашем коде:

DataGrid<String> grid = new DataGrid<String>();

    TextColumn<String[]> date = new TextColumn<String[]>() {
        public String getValue(String[] object) {
           return object[0];
        }
    };

Разделите свои строки при их добавлении:

private ListDataProvider<String[]> dataProvider = new ListDataProvider<String[]>();
private List<String[]> displayItems = dataProvider.getList();
...

for (String textString : textStrings) {
    displayItems.add(textString.split(";");
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню