zoukankan      html  css  js  c++  java
  • OAF中 遍历HGrid组件中的所有VO行

     在HGrid组件中有如下所示的HeaderVO和LineVO

    需要在头上的LOV中触发事件去更新行VO中的值,LOV事件的处理方法见 getLovParameter ,但是由于HGrid的特殊性,不能取到当前事件行,所以建议在VO中新增一个transection的变量,例如LovChangeFlag。

    选择LOV的事件后设置该值为Y

    public void setAccountItemId(Number value)
    {
    setAttributeInternal(ACCOUNTITEMID, value);
    setLovChangeFlag("Y");
    }

    PFR 中LOV事件处理

    else if (pageContext.isLovEvent()) {
    
    else if ("AccountItemCode".equalsIgnoreCase(lovInputSourceId)) {
    OAHGridBean hGridBean = 
    (OAHGridBean)webBean.findChildRecursive("AccountHgrid");
    OAHGridQueriedRowEnumerator hgridEnum = 
    new OAHGridQueriedRowEnumerator(pageContext, hGridBean);
    
    am.drAccountChangeFin(hgridEnum);
    }
    
    }

    am中事件处理

      public void drAccountChangeFin(OAHGridQueriedRowEnumerator hgridEnum)
      {
          
        while (hgridEnum.hasMoreElements())
        {
          Row rowToUpdate = (Row)hgridEnum.nextElement();
          if (rowToUpdate != null)
          {
            String lovChangeFlag = 
              (String)rowToUpdate.getAttribute("LovChangeFlag");
            if ("Y".equals(lovChangeFlag)) //得到触发LOV事件的行
            {
              rowToUpdate.setAttribute("LovChangeFlag", "N");  //得到后再将此值设为N
                        Number headerId= 
                (Number)rowToUpdate.getAttribute("HeaderId");
              //业务代码
              //...
                while (hgridEnum.hasMoreElements())
                    {
                      rowToUpdate = (Row)hgridEnum.nextElement();
                      Number currentHeaderId = 
                        (Number)rowToUpdate.getAttribute("HeaderId");
                        //此处判断遍历得到的row是否是LINEVO中的数据
                      if (headerId.equals(currentHeaderId))
                      {
                        rowToUpdate.setAttribute("XXX", value );
                      }
                    }
            }
          }
        }
      }    

    OAHGridQueriedRowEnumerator会将HGrid中所有的数据放入枚举中,并且会将HeaderVO中的所有数据放在前面,将LineVO中的所有数据放在后面,所以不用担心在遍历的时候会先遍历到LineVO中的数据。

  • 相关阅读:
    Python 学习记录1
    IL 汇编学习笔记(四)
    Petshop 4 学习
    MSN robot 开发相关资料
    MSDN 中文网站的某些翻译简直让人抓狂
    GridView 中如何给删除按钮添加提示
    MSDTC 分布式事务无法启动
    IL 汇编学习笔记(一)
    ASP.NET 2.0 之 Master Page 学习笔记
    IL 汇编学习笔记(二)
  • 原文地址:https://www.cnblogs.com/huanghongbo/p/5997799.html
Copyright © 2011-2022 走看看