向多页TABLE中插入数据时,新增行总是在当前页的最后一行

CODE IN CO

OATableBean table = (OATableBean)webBean.findChildRecursive("LineTable"); int numOfRowsDisplay = table.getNumberOfRowsDisplayed();
            Serializable[] param01 = { new Number(numOfRowsDisplay) };
            Class[] classType = new Class[] { Number.class, };
            am.invokeMethod("addPlanLines", param01, classType);

CODE IN AM

public void addPlanLines(Number numOfDisplay) {
        OADBTransaction tsn = this.getOADBTransaction();

        CuxPosAuditPlanLinesFullVOImpl lineVO = getCuxPosAuditPlanLinesFullVO();
        Number planId = getPlanId();

        lineVO.setMaxFetchSize(0); if (!lineVO.isPreparedForExecution()) {
            lineVO.setWhereClause(null);
            lineVO.executeQuery();
        }

        RowSet localRowSet = lineVO.getRowSet(); int i = 1; int j = numOfDisplay.intValue(); int rangeStart = localRowSet.getRangeStart(); int rangeSize = localRowSet.getRangeSize(); int rowCountInRange = localRowSet.getRowCountInRange(); int i1; if (rowCountInRange + i <= j)
            i1 = rowCountInRange; else {
            i1 = j - i;
        }
        CuxPosAuditPlanLinesFullVORowImpl row = (CuxPosAuditPlanLinesFullVORowImpl)lineVO.createRow(); if (rangeSize < i1) {
            rangeSize++;
            localRowSet.setRangeSize(rangeSize);
            localRowSet.setRangeStart(rangeStart);
        }

        row.setPlanId(planId);
        Number pk = getSequenceValue("CUX_POS_AUDIT_PLAN_LINES_S");
        row.setLineId(pk);
        row.setOrgId(new Number(tsn.getOrgId()));
        row.setOrgName(getOrgName(tsn.getOrgId()));
        localRowSet.insertRowAtRangeIndex(i1, row);
        localRowSet.setCurrentRowAtRangeIndex(i1);
    }
方法二:
/**
   * This method is for use with UI Table addRows buttons that require the
   * addition of multiple rows; given a RowIterator (such as a VO) and the
   * number of rows the caller needs to add, this method figures out where
   * the caller should start adding rows in order to comply with the BLAF
   * standard that newly added rows should go into the bottom of the current
   * table range (which is the same as the RowIterator range if things are
   * set up properly), pushing rows into the next range if necessary
   *
   * Returns: range-based (not absolute) index within the current range
  
*/
  public static int getStartIndexForMultiInsert(RowIterator rowIt, int numRowsToAdd)
  {
   
int numRowsInRange = rowIt.getRowCountInRange();
   
int rangeSize = rowIt.getRangeSize();
   
int firstIndexAtWhichToAdd = 0 ;
   
int numOpenSlotsInRange = (rangeSize - numRowsInRange);

   
if (rowIt.getRangeSize() < rangeSize)
    {
      rowIt.setRangeSize(rangeSize);
    }

   
if (numOpenSlotsInRange < numRowsToAdd)
    {
      firstIndexAtWhichToAdd
= rangeSize - numRowsToAdd;
    }
   
else
    {
      firstIndexAtWhichToAdd
= numRowsInRange;
    }

   
return firstIndexAtWhichToAdd;
  }

调用:
int indexForRowInserts = getStartIndexForMultiInsert(vo, 1 );
  vo.insertRowAtRangeIndex(indexForRowInserts,row);

方法三:

这种方法有点小问题:

仅仅在第一页有效,应该可以再修改修改,懒得改了
calculVO.insertRow(row);  
int fetched = calculVO.getFetchedRowCount();
fetched
= fetched > 9 ? 9 : fetched;
if (fetched > 0)
{
  
int current = fetched % 10;
  
if (current == 0)
   {
     fetched
= 9;
   }
else
   {
     fetched
= current > 9 ? 9 : current;
   }
}
calculVO.insertRowAtRangeIndex(fetched, row);

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/24627116/viewspace-2154482/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/24627116/viewspace-2154482/

你可能感兴趣的:(向多页TABLE中插入数据时,新增行总是在当前页的最后一行)