KDTable常用处理代码

转自http://121.32.28.234:8800/kdwiki/index.php?edition-view-36-4.html

如何使得KDTable支持多行文本的显示:
只需要给KDTable的列设置一个多行显示的属性即可。设置的方法:
col.getStyleAttributes().setWrapText(true);


如何设置KDTable向下键自动新增行
KDTableHelper里面的方法
1. /**
2. * 在table的最后一行按下箭头自动新增行。
3. *
4. * @param table
5. * @param isAddRow
6. * 是否自动新增行
7. * @param actionAfterAddRow
8. * 新增行后将触发的事件
9. */
10. public static void downArrowAutoAddRow(KDTable table, boolean isAddRow, Action actionAfterAddRow)


如何设置KDTable Tab键和Enter键自动新增行
KDTableHelper的这个方法可以满足这个需求:
1. /**
2. * 修改Enter键的行为使它于Tab一致
3. *
4. * @param table
5. * @param isAddRow
6. * 焦点到了最后一行,再次按下enter和tab是否自动增加新行
7. * @param actionAfterAddRow
8. * 添加新行后的事件
9. */
10. public static void updateEnterWithTab(KDTable table, boolean isAddRow, 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. KDTSortManager sm = new KDTSortManager(table)
2. {
3. public void sort(int colIndex, int sortType)
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. KDTSortManager sm = 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"))。这里的0.00只是示例,数字格式还有很多种,具体可以参考前面显示格式的介绍。
3、 日期类型数据导出excel后显示格式不正确。
解决办法:给KDTable的列设置格式串(col.getStyleAttributes().setNumberFormat("yyyy-MM-dd"))。这里的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、 "#,##0.00 "表示两位小数,且显示千份位
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)只是一个示例,可以为任意的数字格式串,后边再加上;" "(空格)即表示数据为0时不显示。

日期类:
1、 yyyy-m-d
2、 yyyy-MM-dd
3、 yyyy-MM-dd hh:mm:ss
4、 yyyy年MM月dd日
百分比:
1、0%
2、0.00%

…… 详细请打开Excel2003,单元格右键,设置单元格格式,选一种格式,点自定义即可看到该格式的格式串;有的Excel格式串后有带”_”,在使用时,必须去掉。


如何理解KDTable的Render和Editor
Render即为绘制器,KDTable的每个单元格都是对应的绘制器绘制出来的,例如文本绘制器将进行文本的绘制,CheckBox绘制器将在单元格绘制CheckBox的样子,图片绘制器将在单元格绘制图片等。
Editor 即为编辑器,当单元格进入编辑状态后,会在单元格的位置显示编辑器,通过编辑器可以修改单元格的值。在同一时刻,只能有一个单元格进入编辑状态。进入编辑 状态的方法有(1)双击或者单击某个单元格,有些编辑器是双击以后再进入,有些编辑器是单击后进入;(2)选中某个单元格,按F2可以进入编辑器;(3) 选中某个单元格,按下编辑器能接受的按键,例如文本编辑器可以接受任意可见字符,checkbox可以接受空格键作为切换选择的键,按下这些键后,单元格 也将进入编辑状态。结束编辑的方法有(1)在编辑器中按下Enter键或者Tab键;(2)在编辑状态下点击表格的其他单元格;(3)表格控件失去焦点。 在编辑状态下按下Esc键将取消编辑。结束编辑和取消编辑的区别在于,结束编辑时会将单元格的值修改为编辑器的值,取消编辑器将保持单元格的旧值。


如何在取数之后,调整KDTable单元格的内容或者显示格式
table. addKDTDataFillListener这个事件将在取数事件之后被调用,在这个事件当中,取数事件获取的数据已经填充到KDTable当中,可以 直接获取KDTable的行及单元格进行操作。DataFillListener和取数事件是一一对应的,取数事件调用一次则 DataFillListener将被调用一次,而且DataFillListener的事件参数中的起始行和结束行也是和取数事件的参数一致的。需要注 意的是在DataFillListener中只能访问事件参数中的起始行和结束行范围的行,千万不要在这个事件里访问table的所有行,因为如果在这里 访问不在事件参数范围内的行,可能导致再次触发取数事件。

如何通过代码控制KDTable新增行
方法一:

 //增行
EmpEnrollBizBillEntryInfo entry = new EmpEnrollBizBillEntryInfo();//创建分录的实体
entry.setEmpName(name);//设置实体属性
entry.setIDCardNo(id);
editData.getEntrys().add(entry);//将实体新增到editData的实体列表中。
loadFields();//重新加载分录信息 

方法二:

 //增行
addLine(kdtEntries);
IRow newRow = kdtEntries.getRow(kdtEntries.getRowCount()-1);//获取新增的行对象
//设置分录的实体
newRow.setUserObject(new ReceivingBillEntryInfo());
//设置分录实体的属性
newRow.getCell("Band").setValue(obei.getBand());//品牌
newRow.getCell("ProductSeries").setValue(obei.getProductSeries());//产品线
newRow.getCell("Period").setValue(obei.getPeriod());//期数

你可能感兴趣的:(金蝶EAS,BOS开发)