BOS开发- KDTable常用处理代码

更新时间:2024-04-18 00:16:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

目录

如何使得KDTable支持多行文本的显示: ............................................................................ 1 如何设置KDTable向下键自动新增行 ................................................................................ 2 如何设置KDTable Tab键和Enter键自动新增行 ................................................................. 2 如何调整KDTable的Tab键和enter键的行为 .................................................................... 3 KDTable如何根据内容自动调整行高列宽 .......................................................................... 3 KDTable的排序要如何实现 ............................................................................................... 3 KDTable部分数据导出到excel后显示格式不一致 .............................................................. 4 如何控制KDTable的显示格式 ........................................................................................... 5 如何理解KDTable的Render和Editor ................................................................................ 6 如何在取数之后,调整KDTable单元格的内容或者显示格式 ............................................. 6 KDTable刷新后,滚动条跳到最后修改位置 ....................................................................... 7 如何通过代码控制KDTable新增行 .................................................................................... 7 对于分录设置排序............................................................................................................ 8 EAS Bos 合计行代码 ......................................................................................................... 8 EASBos 对于某个权限的验证 .......................................................................................... 10 关于Bos 开发中使用字段类型是选择已有基础资料的的源代码 ...................................... 10 关于对EASbos 分录设定默认值...................................................................................... 11 关于eas 单据中有多个分录的情况下,默认是哪个实现了排序....................................... 11 eas bos 客户端常用代码 ................................................................................................. 12 关于验证常用的几个类文件和代码 ................................................................................. 13 EAS多分录单据分录添加按钮,加到最左边 .................................................................... 14 禁用EAS多分录单据分录上的操作按钮 .......................................................................... 15 显示EAS标准单据自带kdtable(kdtEntry) 右键导出 excel菜单 ........................................ 16 列表界面根据情况设置单行背景色高亮 .......................................................................... 17 修改ListUI的表体列的显示文字 ..................................................................................... 18

如何使得KDTable支持多行文本的显示:

只需要给KDTable的列设置一个多行显示的属性即可。设置的方法: col.getStyleAttributes().setWrapText(true);

如何设置KDTable向下键自动新增行

KDTableHelper里面的方法 1. /**

2. * 在table的最后一行按下箭头自动新增行。 3. *

4. * @param table 5. * @paramisAddRow 6. * 是否自动新增行

7. * @paramactionAfterAddRow 8. * 新增行后将触发的事件 9. */

10.public static void downArrowAutoAddRow(KDTable table, booleanisAddRow, Action actionAfterAddRow)

如何设置KDTable Tab键和Enter键自动新增行

KDTableHelper的这个方法可以满足这个需求: 1. /**

2. * 修改Enter键的行为使它于Tab一致 3. *

4. * @param table 5. * @paramisAddRow

6. * 焦点到了最后一行,再次按下enter和tab是否自动增加新行 7. * @paramactionAfterAddRow 8. * 添加新行后的事件 9. */

10.public static void updateEnterWithTab(KDTable table, booleanisAddRow, Action actionAfterAddRow)

如何调整KDTable的Tab键和enter键的行为

KDTable默认情况下Tab键和Enter键分别起到单元格选择调整的作用,Tab键跳到右侧单元格,Enter键跳到下方的单元格。

KDTableHelper提供了一些方法用于修改Enter键和Tab键的行为。

KDTableHelper.releaseEnter:释放Enter键,即KDTable将不响应Enter键。 KDTableHelper.releaseTab:释放Tab键,即KDTable将不响应Tab键。 KDTableHelper.releaseEnterAndTab:释放Tab和Enter键。

KDTable如何根据内容自动调整行高列宽

双击KDTable的两行(或者列)之间的边线,将会根据内容自动调整行高(列宽)。 通过调用KDTableHelper的autoFitRowHeight和autoFitColumnWidth这两个方法也可以调整行高列宽。计算行高和列宽需要结合字体、Graphics上下文,是比较耗时的,应有时需要注意。

KDTable的排序要如何实现

KDTable的排序都是由KDTSortManager来实现的。分为实模式和虚模式两种应用模式。 虚模式:排序的具体实现由外部通过继承并重写KDTSortManager的sort方法来实现。例如ListUI的就是重写了这个sort方法,在这个方法中清楚KDTable中的数据,然后刷新KDTable,用新的排序方式重新向服务端取数。 1. KDTSortManagersm = new KDTSortManager(table) 2. {

3. public void sort(intcolIndex, intsortType) 4. {

5. // 一定要调用super.sort,这句代码将影响表头排序箭头的显示效果 6. super.sort(colIndex, sortType);

7.

8. if (sortType == KDTSortManager.SORT_ASCEND) 9. { 10. // 升序 11. } 12. else 13. { 14. // 降序 15. } 16. } 17. }; 复制代码

实模式:KDTSortManager内置了实模式下的排序方式,不需要重写sort方法即可实现实模式的排序,当然,你也可以重写sort方法来实现自己的排序逻辑。 1. KDTSortManagersm = new KDTSortManager(table) 2. sm.setSortAuto(true);

KDTable中如何调整行高列宽

有些时候,KDTable中单元格的文本内容过长,单元格显示不下,需要调整行高或者列宽,通过鼠标双击行或者列的边框线,KDTable会自动调整行高或者列宽到合适位置。 如果想要通过代码在后台调整行高列宽到合适位置,下面的方法分别对应行高、列宽、表头行高:

KDTableHelper的autoFitRowHeight、autoFitColumnWidth、autoFitHeadRowHeight 由于计算合适行高列宽,需要结合当前Graphics以及字体等信息进行计算,这个动作是相对比较耗时的,因此这些方法要结合实际情况使用,大数据量下使用这些方法,将可能导致性能问题。

KDTable部分数据导出到excel后显示格式不一致

这种问题一般是由于没有给KDTable设置正确的格式导致的。主要分为一下几类: 1、由数字组成的长字符串导出excel后显示为科学计数法或字符串显示不完整,例如手机号13433445678。

解决办法:给KDTable的列设置格式串

(col.getStyleAttributes().setNumberFormat(\,指定该列为字符型即可。 2、数字位过多的大数字导出excel后显示为科学计数法或精度丢失。 解决办法:给KDTable的列设置格式串

(col.getStyleAttributes().setNumberFormat(\。这里的0.00只是示例,数字格式还有很多种,具体可以参考前面显示格式的介绍。 3、日期类型数据导出excel后显示格式不正确。 解决办法:给KDTable的列设置格式串

(col.getStyleAttributes().setNumberFormat(\。这里的yyyy-MM-dd只是示例,日期格式还有很多种,具体可以参考前面显示格式的介绍

如何控制KDTable的显示格式

KDTable提供了格式化的功能,通过格式化的功能可以控制单元格的显示格式,设置列格式的方法:

table.getColumn(colIndex).getStyleAttributes().setNumberFormat(formatString); 目前KDTable已能支持Excel2003的格式串,只有个缺陷:格式串中有中文导出尚有问题,中文变乱码,建议将来都使用Excel2003的格式串,但旧的格式化串还支持,但是如果该表需要导出到excel,必须使用新的格式串,否则导出到excel,可能会显示不一致。 文本类:

1、@ 指定内容按文本显示,主要用于编码、手机号等用数字表示的文本。设定该格式后,可以保证导出excel时,此类文本不会被转成数字显示。 数值类:

1、 0.00 表示两位小数,例如3.10367显示为3.10

2、 0.## 表示两位小数,当小数末位为0时,0将不显示。例如3.10显示为3.1 3、 \表示两位小数,且显示千份位 4、 #,##0.00;[Red]#,##0.00 表示负数红字

5、0.00;[Red]0.00;\表示负数红字,且数据为0时不显示

6、0.00;[Red](0.00);\\表示正数时两位小数,负数时两位小数并显示红色,0时不显示。0.00;[Red](0.00)只是一个示例,可以为任意的数字格式串,后边再加上;\\空格)即表示

(com.kingdee.bos.dao.IObjectValue) kdtPerson .getCell(rowIndex, \ \

kdtPerson.getCell(rowIndex, \ } }

关于对EASbos 分录设定默认值

kdtEntrys_detailPanel.addAddListener(

new com.kingdee.eas.framework.client.multiDetail.IDetailPanelListener() { public void beforeEvent(

com.kingdee.eas.framework.client.multiDetail.DetailPanelEvent event) throws Exception {

IObjectValuevo = event.getObjectValue(); vo.put(\

vo.put(\

void

} public

afterEvent(com.kingdee.eas.framework.client.multiDetail.DetailPanelEvent event) throws Exception { }

});

关于eas 单据中有多个分录的情况下,默认是哪个实现了排序

protectedKDTablegetDetailTable() { return kdtEntrys; }

关键就是看这个方法中的分录是那个分录,那个分录就默认实现了排序的工程。对于其他的,可以自己使用代码实现一个简单的排序

KDTSortManagersortManager = new KDTSortManager(kdtEntrys); sortManager.setSortAuto(true); sortManager.setClickCount(1);

for(inti = 0; i

eas bos 客户端常用代码

public void onLoad() throws Exception { super.onLoad();

contname.setEnabled(false); contname.setVisible(true);

KDTDefaultCellEditorworkArea_editor = (KDTDefaultCellEditor) kdtEntrys .getColumn(\

KDBizPromptBoxworkArea_prompt = (KDBizPromptBox) workArea_editor

.getComponent();

workArea_prompt

.setQueryInfo(\ KDTDefaultCellEditorprofessional_editor = (KDTDefaultCellEditor) kdtEntrys

.getColumn(\

KDBizPromptBoxprofessional_prompt = (KDBizPromptBox) professional_editor .getComponent(); professional_prompt

.setQueryInfo(\

KDTDefaultCellEditoroutPerson_editor = (KDTDefaultCellEditor) kdtEntrys .getColumn(\

KDBizPromptBoxoutPerson_prompt = (KDBizPromptBox) outPerson_editor .getComponent(); outPerson_prompt.setDisplayFormat(\outPerson_prompt.setEditFormat(\outPerson_prompt.setCommitFormat(\

kdtEntrys_detailPanel.setTitle(\外包人员信息\

CompUtil.setTitlePanelLength(kdtEntrys_detailPanel, 120);

}

protected void verifyInput(ActionEvent e) throws Exception { KDLabelContainer[] container = new KDLabelContainer[] { contcontractNum, }

contsubUnit,contprojectItem};

STExceptionexc = STRequiredUtils.checkRequiredItem(container); if (STUtils.isNotNull(exc)) { super.handUIExceptionAndAbort(exc); } String[]

columnNames

=

new

String[]

{ \

STException exc2 = STRequiredUtils.checkEntryRequiredItem(kdtEntrys, columnNames); if (STUtils.isNotNull(exc2)) { super.handUIExceptionAndAbort(exc2); }

super.verifyInput(e);

关于验证常用的几个类文件和代码

1 TrainVerifyUtils

TrainVerifyUtils.verifyRepeatRow(this, kdtEntrys, \试题类型\

2 TrainUtils

TrainUtils.getSelectedValues(tblMain);

3 commonUtilFacade

if (commonUtilFacade.checkColumnDup(\ editData.getNumber(), editData.getId())) {

MsgBox.showInfo(this, EASResource.getString(RES, \ SysUtil.abort(); }

4 必录项检查

// 检查必填项调用代码

KDLabelContainer[] container = new KDLabelContainer[] { contNumber,

conttitle,contsystem,contBizDate,contstartTime,contendTime,conttotalScore,conttotalTime,contstate };

STExceptionexc = STRequiredUtils.checkRequiredItem(container); if (STUtils.isNotNull(exc)) {

super.handUIExceptionAndAbort(exc); }

EAS多分录单据分录添加按钮,加到最左边

EAS多分录标准单据的分录操作按钮是在表格右上方的,有时由于业务需求,需要添加其它的操作按钮,以满足业务需求,可以先通过BOS设计工具,在UI上任一位置添加好所需要的代码,再通过如下代码,把按钮添加到多分录表头上。当你把指定的按钮添加到分录的按钮面板上后,UI上的自动就不显示了。 先定义好方法。 /**

* 给分录上添加按钮,加到最左边 *

* @author syj * @date 2009-7-8 *

* @param table * @param button */

private void addButtonToHMDEntry(KDTable table, KDWorkButton button) { if (table.getParent() == null || table.getParent().getParent() == null) return; // 隐藏按钮

Component c = table.getParent().getParent(); if (c instanceofDetailPanel) { JPanel panel = (JPanel) c; JPanelcontrolPanel = null;

// 获取controlPanel

Component[] components = panel.getComponents(); for (inti = 0; i

if (\ controlPanel = (KDPanel) component; } }

// 获取btn

if (controlPanel != null) {

Rectangle rect = table.getBounds();

int x = rect.width - (button.getWidth() + 86 + 5);

controlPanel.add(button, new com.kingdee.bos.ctrl.swing.KDLayout.Constraints(x, 5, button.getWidth(), 19, 9)); } } }

禁用EAS多分录单据分录上的操作按钮

EAS多分录标准单据的分录操作按钮是在表格右上方的,有时由于业务需求,这部分数据要自动生成,不充许操作,可能需要禁用或隐藏这些按钮,由于框架没有提供相应的接口,可以通过以下代码来实现

public static void disableHMDEntryButtons(KDTable table) { if (table.getParent() == null || table.getParent().getParent() == null) return; // 隐藏按钮

Component c = table.getParent().getParent(); if (c instanceofDetailPanel) { JPanel panel = (JPanel) c; JPanelcontrolPanel = null; // 获取controlPanel

Component[] components = panel.getComponents(); for (inti = 0; i

Component component = components[i];

if (\ controlPanel = (KDPanel) component; } }

// 获取btn

if (controlPanel != null) {

components = controlPanel.getComponents(); for (int j = 0; j

KDWorkButtonworkButton = (KDWorkButton) component; workButton.setEnabled(false); } } } } }

显示EAS标准单据自带

kdtable(kdtEntry) 右键导出 excel菜单

框架在CoreUI中,把“导出到Excel”和“导出选择部分到Excel”2个右键菜单给隐藏掉了,可以通过覆盖下面的方法使这两个菜单显示。

/**

* 显示被框架隐藏的导出Excel的右键菜单 * @author syj */

public KDTMenuManagergetMenuManager(KDTable table) {

KDTMenuManagermenuManager = super.getMenuManager(table); if (menuManager != null) {

Component menus[] = menuManager.getMenu().getComponents(); for (inti = 0; i

return menuManager; }

列表界面根据情况设置单行背景色高亮

列表的填充是在afterTableFillData之前进行的,所以判断的代码可以加在这个方法里面。 protected void afterTableFillData(KDTDataRequestEvent e) { super.afterTableFillData(e);

int count = this.tblMain.getRowCount(); if(count>0){

for(inti=0; i

IRow row = tblMain.getRow(i);

if(row.getCell(\&&

\ row.getStyleAttributes().setBackground(new Color(255,80,30)); if(row.getCell(\

}else &&

\ row.getStyleAttributes().setBackground(Color.ORANGE);

} } }

另外有一个execQuery方法,如果加在这个方法里,那么只有当有过滤条件和点刷新按钮时,才会起作用。

修改ListUI的表体列的显示文字

this.tblMain.getHeadRow(0).getCell(27).setValue(\所属管家\

KDTable显示枚举覆盖方法

Java代码 1. 2. 3. 4. 5.

protected IQueryExecutor getQueryExecutor(IMetaDataPK queryPK, EntityViewInfo viewInfo) { IQueryExecutor executor = super.getQueryExecutor(queryPK, viewInfo); executor.option().isAutoTranslateEnum = true; return executor; }

枚举在KDTable中显示数字解决

在KDTable中,如果该列是枚举,则显示的value,不会显示别名,要显示别名有两个方法: 1、在Query中用case 语句,这个办法比较笨,如果枚举添加,或者比较多,需要重新修改Query。不建议使用。

2、覆盖父类方法getQueryExecutor

Java代码 1. 2. 3. 4. 5. 6. 7. protected IQueryExecutor getQueryExecutor(IMetaDataPK queryPK, EntityViewInfo viewInfo) { IQueryExecutor iec = super.getQueryExecutor(queryPK, viewInfo); iec.option().isAutoTranslateEnum = true;//显示枚举 iec.option().isAutoTranslateBoolean=true;//显示checkbox return iec; }

3、在KDTable的列中设置Editor。这样该列也会显示成下拉框:

Java代码 1. 2. private void addCtrl() { tblMain.checkParsed(); 3. 4. 5. 6. 7. 8. 9. KDComboBox tblMain_useToGuarUnit = new KDComboBox(); tblMain_useToGuarUnit.setName(\); tblMain_useToGuarUnit.setVisible(true); tblMain_useToGuarUnit.addItems(EnumUtils.getEnumList(\s.huar.common.YesOrNoEnum\).toArray()); KDTDefaultCellEditor tblMain_useToGuarUnit_CellEditor = new KDTDefaultCellEditor(tblMain_useToGuarUnit); this.tblMain.getColumn(\).setEditor(tblMain_useToGuarUnit_CellEditor); }

添加统计行

1、分录中添加统计行

protected void setTableToSumField() { super.setTableToSumField();

setTableToSumField(kdtDeviceReg, new String[] { \\ }

2、叙事薄上添加 统计行

在query中字段有是否是统计字段(isSumField)扩展属性,设为true,主键定义上添加id,叙事薄中就自动汇总了

序时簿上的排序设置

EAS单据序时簿的排序,通过修改相应Query上的排序是不生效的,这时需要重写序时簿的getQueryExecutor方法。以下是重写的例子:

protected IQueryExecutorgetQueryExecutor(IMetaDataPK arg0, EntityViewInfo arg1) {

SorterItemCollection sic = new SorterItemCollection(); SorterItemInfosiInfo = new SorterItemInfo(\ siInfo.setSortType(SortType.ASCEND); sic.add(siInfo);

arg1.setSorter(sic);

return super.getQueryExecutor(arg0, arg1); }

KDTable单元格如何格式化显示。

开发过程中需要对KDTable表格单元格中的数值型显示为后面加年,比如输入的是“3”,但要求显示为“3年”,代码如下即可:

this.tblMain.getColumn(0).getStyleAttributes().setNumberFormat(\年\

EAS单据分录的一些初始化设置

// 设定单据分录选择模式为单元格选择模式

kdtEntrys.getSelectManager().setSelectMode(KDTSelectManager.CELL_SELECT);

// 设定支持鼠标拖动表头移动表列 kdtEntrys.setColumnMoveable(true);

EAS设定分录按钮快捷键// 设定分录按钮快捷键

kdtEntrys_detailPanel.getAddNewLineButton().setMnemonic(KeyEvent.VK_DOWN); kdtEntrys_detailPanel.getRemoveLinesButton().setMnemonic(KeyEvent.VK_UP);

本文来源:https://www.bwwdw.com/article/1oip.html

Top