表格列值相同的情况下不显示 PowerBuilderSwingCC++C#
程序员文章站
2022-03-26 10:08:37
...
客户由于使用的是powerbuilder(以下称为pb)开发的CS架构的应用,用过pb的都知道其数据窗口技术很强大,其中一点就是就是表格列数据下一行与上一行相同时可以通过简单的设置二不进行显示。
当迁移到三层架构时,也要求实现该功能,我们的前端是swing编写的,考虑了一下有两种思路:
第一:在后台返回一个对象列表的时候对其进行处理,逐行判断比较,如果值相同则将值值为null,这样数据填充到表格的时候就不显示了。
第二:返回的对象列表不做处理,在表格上进行处理。这里利用了表格的rendder机制,在此进行判断。如果当前单元格的值与上一行单元格的值相同则不显示。
参考代码如下:
if (hiddenRepeatValue){//隐藏重复值判断
if (row>=1){
Object preValue=table.getValueAt(row-1, column);
if (preValue!=null&&value!=null&&preValue.equals(value))
((JLabel)c).setText("");
}
}
比较这两种方式第一种方式有一定的缺点,就是在表格前端排序的时候会有问题因为部分数据置为null了,当然如果在数据库端排序就没有问题了,第二种方式就相对比较完美了!
附件为两种工具实现的效果图!
当迁移到三层架构时,也要求实现该功能,我们的前端是swing编写的,考虑了一下有两种思路:
第一:在后台返回一个对象列表的时候对其进行处理,逐行判断比较,如果值相同则将值值为null,这样数据填充到表格的时候就不显示了。
第二:返回的对象列表不做处理,在表格上进行处理。这里利用了表格的rendder机制,在此进行判断。如果当前单元格的值与上一行单元格的值相同则不显示。
参考代码如下:
if (hiddenRepeatValue){//隐藏重复值判断
if (row>=1){
Object preValue=table.getValueAt(row-1, column);
if (preValue!=null&&value!=null&&preValue.equals(value))
((JLabel)c).setText("");
}
}
比较这两种方式第一种方式有一定的缺点,就是在表格前端排序的时候会有问题因为部分数据置为null了,当然如果在数据库端排序就没有问题了,第二种方式就相对比较完美了!
附件为两种工具实现的效果图!