1.效果截图和说明:当是否正常情景参数为“是”时,正常情景参数值可以被编辑,为“否”时,不能被编辑
2.该功能要考虑到编辑修改“是否”的状态对其控制项的影响,所以该功能要用到表体编辑前和编辑后事件,代码如下:
public class BodyBeforeEditHandler implements
IAppEventHandler<CardBodyBeforeEditEvent> {
@Override
public void handleAppEvent(CardBodyBeforeEditEvent e) {
if (e.getKey().equals("nor_para")) {
setCellEditable(e);
}
e.setReturnValue(UFBoolean.TRUE.booleanValue());
}
/**
* 设置是否可以编辑
* @param e
*/
private void setCellEditable(CardBodyBeforeEditEvent e) {
Integer is_nor_para = Integer.parseInt(e.getBillCardPanel().getBodyItem("is_nor_para").getValueObject().toString());
if(0 == is_nor_para){
e.getBillCardPanel().getBillModel().setCellEditable(e.getRow(), "nor_para", false);
}
if(1 == is_nor_para){
e.getBillCardPanel().getBillModel().setCellEditable(e.getRow(), "nor_para", true);
}
}
}
public class BodyAfterEditHandler implements
IAppEventHandler<CardBodyAfterEditEvent> {
private DefaultExceptionHanler exceptionHandler;
public DefaultExceptionHanler getExceptionHandler() {
return exceptionHandler;
}
public void setExceptionHandler(DefaultExceptionHanler exceptionHandler) {
this.exceptionHandler = exceptionHandler;
}
@Override
public void handleAppEvent(CardBodyAfterEditEvent e) {
try{
if (e.getKey().equals("is_nor_para")) {
setCellEditable(e);
}
}catch(Exception e1){
getExceptionHandler().handlerExeption(e1);
}
}
/**
* 设置是否可以编辑
* @param e
*/
private void setCellEditable(CardBodyAfterEditEvent e) {
Integer is_nor_para = Integer.parseInt(e.getBillCardPanel().getBodyItem("is_nor_para").getValueObject().toString());
if(0 == is_nor_para){
e.getBillCardPanel().getBillModel().setValueAt(null, e.getRow(), "nor_para");//清除已填内容
e.getBillCardPanel().getBillModel().setCellEditable(e.getRow(), "nor_para", false);//修改为不可编辑
}
if(1 == is_nor_para){
e.getBillCardPanel().getBillModel().setCellEditable(e.getRow(), "nor_para", true);
}
}
}
3.在对应的xml中配置编辑前后事件即可
<!-- 表体编辑后事件 -->
<bean class="nc.ui.pubapp.uif2app.event.EventHandlerGroup">
<property name="event" value="nc.ui.pubapp.uif2app.event.card.CardBodyAfterEditEvent" />
<property name="handler">
<bean class="nc.ui.frm_alm.stress_test_plan.ace.handler.BodyAfterEditHandler" >
<property name="exceptionHandler"><ref bean="exceptionHandler" /></property>
</bean>
</property>
</bean>
<!-- 表体编辑前事件 -->
<bean class="nc.ui.pubapp.uif2app.event.EventHandlerGroup">
<property name="event" value="nc.ui.pubapp.uif2app.event.card.CardBodyBeforeEditEvent" />
<property name="handler">
<bean class="nc.ui.frm_alm.stress_test_plan.ace.handler.BodyBeforeEditHandler" />
</property>
</bean>