//合计行方法
/**
* 添加统计行
* @param table
* @param HasTotalRow 表格中是否包含合计行
* @param fields
* @param colDisplayFormat 显示格式
*/
public static void apendFootRow(KDTable table,boolean HasTotalRow, String fields[],String colDisplayFormat)
{
int size = fields.length;
if (size == 0)
return;
Map sumValue = new HashMap();
// 利用getRowCount的到的行可能不正确
int count = table.getRowCount3();
if (HasTotalRow)
{
count = table.getRowCount3()-1;
}
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";
if (colDisplayFormat!=null && colDisplayFormat.length()>0)
{
colFormat=colDisplayFormat;
}
String total = EASResource.getString(FrameWorkClientUtils.strResource
+ "Msg_Total");
table.getIndexColumn().setWidthAdjustMode(KDTIndexColumn.WIDTH_MANUAL);
if (count>=0 && count<1000)
{
table.getIndexColumn().setWidth(30);
}
else if (count>=1000 && count<10000)
{
table.getIndexColumn().setWidth(50);
}
else
{
table.getIndexColumn().setWidth(70);
}
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);
}
}
}
//合计行调用代码
apendFootRow(kdtGatherEntrys, false, new String[]{"capacity","repairFrequency","totalRrepairAmount"}, "")
//合计行特殊字段算法演示
//一个表分为 表头 表体 表脚
//如果一个表上只加了一个合计行,可通过下面代码获取合计行
IRow footRow = kdtGatherEntrys.getFootRow(0);
//然后通过获取到的footRow 进行字段算法处理
if(UIRuleUtil.isNotNull(footRow.getCell("repairFrequency").getValue())
&& UIRuleUtil.isNotNull(footRow.getCell("capacity").getValue())) {
BigDecimal repairFrequency = (BigDecimal) footRow.getCell("repairFrequency").getValue();
BigDecimal capacity = (BigDecimal) footRow.getCell("capacity").getValue();
footRow.getCell("monthlyMean").setValue(repairFrequency.divide(capacity, 2, BigDecimal.ROUND_HALF_UP));
}