2016-09-08 6 views
1

vaadin에서 테이블을 만들었습니다. 데이터베이스에서 열을 선택합니다. 순차적으로 모든 행에 번호를 부여하는 열이 필요합니다.Vaadin에서 연속 번호 열을 만드는 방법

나는 그리드를 들어

Table table = new Table(); 

을 사용하고 있습니다 :

GeneratedPropertyContainer wrappingContainer = new GeneratedPropertyContainer(container); 
      wrappingContainer.addGeneratedProperty("rowHeader", new PropertyValueGenerator<Long>(); 

table.setContainerDataSource(wrappingContainer); 
     table.setColumnOrder("rowHeader", "name", "surname"); 

    layout.addComponent(table); 
+0

가장 간단한 방법은 SQL 쿼리를 수정하여 now number –

답변

1

이 그것을 위해 생성 된 열을 사용

table.addGeneratedColumn("index", new ColumnGenerator(){ 
    @Override 
    public Object generateCell(final Table source, final Object itemId, final Object columnId) 
    { 
     Container.Indexed container = (Container.Indexed) source.getContainerDataSource(); 
     return Integer.toString(container.indexOfId(itemId)); 
    } 
}); 

// add it to the start of the visible columns 
table.setVisibleColumns("index", /* other columns ... */); 

당신은 컨테이너에서 행 번호를 얻을. 그러나 테이블은 인덱스 하위 인터페이스 (예 : BeanItemContainer 또는 IndexedContainer)를 구현하는 컨테이너에서 작동해야합니다.

이것은 당신이 그리드를 사용 할 것입니다 :

// the GeneratedPropertyContainer is a decorator for the original container 
final GeneratedPropertyContainer gpc = new GeneratedPropertyContainer(container); 
grid.setContainerDataSource(gpc); 
gpc.addGeneratedProperty("index", new PropertyValueGenerator<String>(){ 
    @Override 
    public String getValue(final Item item, final Object itemId, final Object propertyId) 
    { 
     // get the index from the original container 
     final Container.Indexed indexContainer = (Container.Indexed) container; 
     return Integer.toString(indexContainer.indexOfId(itemId)); 
    } 

    @Override 
    public Class<String> getType() 
    { 
     return String.class; 
    } 
}); 

// ... 

grid.setColumnOrder("index", /* the other property IDs... */); 

당신이 PropertyValueGenerator<Long> 당신이 그 유형에 대한 NumberRenderer을 설정해야 사용합니다. grid.getColumn("index").setRenderer(new NumberRenderer("%d")); 트릭을 할 것입니다.

+0

을 생성하는 것입니다. 덕분에 그리드와 동일한 작업을 할 수 있습니다. – dhS

+0

Grid를 사용하면 GeneratedPropertyContainer를 사용합니다. 생성 된 컨테이너에 컨테이너를 넣고 위의 솔루션과 비슷한 셀을'addGeneratedProperty'로 추가하고 그리드의 컨테이너를 GeneratedPropertyContainer로 설정한다. –

+0

편집 해 주셔서 감사합니다 ... 색인 열에 모든 열을 가져 왔지만 그 안에 데이터를 가져 오지 않았습니다. – dhS