NC表头改变时封存表体的选中状态
NC表头改变时保留表体的选中状态
当UI处于多选状态时,表体行的选中状态不会保存下来。表头的选中行改变时,表体行将重新处于非选中状态。
以下为保留选中状态的表体行的UI代码
@Override protected void initSelfData() { getBillListPanel().setMultiSelect(true); getBillListPanel().getHeadBillModel().removeRowStateChangeEventListener(); getBillListPanel().getHeadBillModel().addRowStateChangeEventListener(new HeadRowStateListener()); } private class HeadRowStateListener implements IBillModelRowStateChangeEventListener { public void valueChanged(RowStateChangeEvent e) { getBufferData().setCurrentRow(e.getRow()); BillModel model = getBillListPanel().getBodyBillModel(); IBillModelRowStateChangeEventListener l = model.getRowStateChangeEventListener(); model.removeRowStateChangeEventListener(); if (e.isSelectState()) { getBillListPanel().getChildListPanel().selectAllTableRow(); }else{ getBillListPanel().getChildListPanel().cancelSelectAllTableRow(); } model.addRowStateChangeEventListener(l); getBillListPanel().updateUI(); } } @Override public void update(Observable o, Object arg) { // TODO Auto-generated method stub if (beforeUpdate()) { try { if (isListPanelSelected()){ setListBodyData(); int nrow=getBufferData().getCurrentRow(); if (!getBillListPanel().setBodyModelData(nrow)) { getBillListPanel().setBodyModelDataCopy(nrow); } //getBillListPanel().repaint(); int maxSelIndex=getBillListPanel().getHeadTable().getSelectionModel().getMaxSelectionIndex(); int minSelIndex=getBillListPanel().getHeadTable().getSelectionModel().getMinSelectionIndex(); if(nrow>=0&&maxSelIndex==minSelIndex){ getBillListPanel().addEditListener(null); getBillListPanel().getHeadTable().getSelectionModel().setSelectionInterval(nrow,nrow); getBillListPanel().addEditListener(this); } } else setCardUIData(getBufferData().getCurrentVO()); this.getBillCardPanel().updateValue(); //设置单据状态 updateBtnStateByCurrentVO(); } catch (Exception e) { e.printStackTrace(); showErrorMessage(e.getMessage()); } if(getUIControl() instanceof ITableTreeController){ setTableToTreeTable(); } } afterUpdate(); }
主要是重新定义表头的行选中事件以及修改update方法