2017-09-14 10 views
0

아래 스 니펫을 사용하여 NatTable 데이터를 지우고 새로 고침 작업을 완료 할 때 완전히 다시로드합니다.NatTable 데이터를 지우고 다시로드 할 때 행 선택 유지

natTable.getBodyDataProvider().getList().clear(); 
natTable.getBodyDataProvider().getList().addAll(inputList); 
natTable.refresh(); 

데이터가 지워지고 재설정되기 때문에 새로 고침하기 전에 이전에 선택한 행으로 다시 열 선택을 설정할 수 없습니다.

그러나, 나는 선택을 복원 성공적으로 RowSelectionModel을 사용하고 있습니다에 정렬

final RowSelectionModel<T> rowSelectionModel = new RowSelectionModel<T>(bodyLayer.getSelectionLayer(),bodyDataProvider, rowIdAccessor); 
bodyLayer.getSelectionLayer().setSelectionModel(rowSelectionModel); 

데이터가 삭제하고 다시로드 때 행 선택을 복원 할 수 있나요?

기존의 PreserveModel에 대한 질문을 보았습니다. How to use Nebula NatTable's PreserveSelectionModel?하지만 내 질문에 답하지 못했습니다.

누구든지 이에 관해 더 많은 의견을 제시 할 수 있으면 감사하게 생각합니다.

감사합니다, SDS

답변

1

IIRC 당신은 기본 목록을 지우면 (그리고 난 당신이 그렇게 할 때 이벤트가 발생이 있도록 GlazedLists를 사용하는 가정)의 RowSelectionModel는 내부에 저장된 선택을 지 웁니다. 일관성있는 것은 제거 된 객체에 대한 선택을 유지하는 것이 적절하지 않기 때문입니다.

그래서 그 사실을 처리하는 해결 방법을 구현해야합니다. 예를 들어 RowSelectionModel을 확장하는 사용자 정의 ISelectionModel을 구현하고 다른 방식으로 기본 목록과의 일관성을 보장 할 수 있습니다. 또는 기본 목록을 지우기 전에 선택 항목을 기억하고 나중에 선택 항목을 적용하십시오. 그러나이를 수행하기 위해서는 늦게 선택을 적용하기 위해 NatTable에 PaintListener을 등록해야합니다. 그렇지 않으면 내부 이벤트가 지연되어 선택을 지울 것입니다.

다음 스 니펫은 예를 들어 NatTable의 본문 영역에서 항상 다섯 번째 행을 선택합니다.이 행은 열 헤더 행으로 인해 NatTable의 여섯 번째 행입니다.

natTable.addPaintListener(new PaintListener() { 

    @Override 
    public void paintControl(PaintEvent e) { 
     // use column 1 as column 0 in NatTable is the row header 
     // insert the rows to select that you previously cached 
     natTable.doCommand(
       new SelectRowsCommand(natTable, 1, 5, false, false)); 
    } 
}); 
+0

Dirk. 답장을 보내 주셔서 감사합니다. 선택 개체를 캐싱하고 명확하고 다시로드하려면 rowSelectionProviderNatTable.setSelection (new StructuredSelection (previousSelectedObj))을 사용하여 선택 항목을 다시 설정합니다. 이것은 선택 사항을 표로 다시 설정하지 않습니다. NatTable에는 이미 PaintListener가 있으므로, 사용할 수있는 DefaultPaintListner가 있습니까? – SDS

+0

질문을 이해하지 못합니다. 왜 다른 PaintListener를 추가 할 수 없습니까? –

+0

NatTable과 SWT PaintListener를 처음 사용합니다. 행 선택 설정을위한 코드 스 니펫을 공유 할 수 있다면 감사하게 생각하십시오. 고맙습니다. – SDS