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方法