/** * 功能:添加合计行 * * @param table * 指定的KDTable * @param fields * 需要合计的列 */ public static void apendFootRow(KDTable table, String fields[]) { int size = fields.length; if (size == 0) return; Map sumValue = new HashMap(); // 利用getRowCount的到的行可能不正确 int count = table.getRowCount3(); for (int i = 0; i < fields.length; i++) { sumValue.put(fields[i], new BigDecimal("0.00")); } IRow footRow = null; KDTFootManager footManager = table.getFootManager(); if (footManager == null) { footManager = new KDTFootManager(table); footManager.addFootView(); table.setFootManager(footManager); } // 计算所有指定行的合计值 footRow = footManager.getFootRow(0); for (int i = 0; i < count; i++) { IRow row = table.getRow(i); for (int j = 0; j < fields.length; j++) { sumValueForCell(row, fields[j], sumValue); } } if (footRow == null) { footRow = footManager.addFootRow(0); } // 设置合计行显示样式 String colFormat = "%{0.00}f"; String total = EASResource.getString(FrameWorkClientUtils.strResource + "Msg_Total"); table.getIndexColumn().setWidthAdjustMode(KDTIndexColumn.WIDTH_MANUAL); table.getIndexColumn().setWidth(30); footManager.addIndexText(0, total); footRow.getStyleAttributes().setBackground(new Color(0xf6, 0xf6, 0xbf)); for (int i = 0; i < size; i++) { String colName = fields[i]; footRow.getCell(colName).getStyleAttributes().setNumberFormat( colFormat); footRow.getCell(colName).getStyleAttributes().setHorizontalAlign( HorizontalAlignment.RIGHT); footRow.getCell(colName).getStyleAttributes().setFontColor( Color.black); } // 设置合计行的值 for (int i = 0; i < fields.length; i++) { footRow.getCell(fields[i]).setValue(sumValue.get(fields[i])); } } private static void sumValueForCell(IRow row, String key, Map sumValue) { ICell cell = row.getCell(key); if (cell != null) { Object obj = cell.getValue(); if (obj != null) { BigDecimal keyValue = (BigDecimal) sumValue.get(key); keyValue = keyValue.add(new BigDecimal(obj.toString())); sumValue.put(key, keyValue); } } }