找回密码
 立即注册

QQ登录

只需一步,快速开始

guoqp

高级会员

205

主题

783

帖子

1918

积分

高级会员

积分
1918

时代开发者征文活动

guoqp
高级会员   /  发表于:2024-1-10 13:36  /   查看:1669  /  回复:13
本帖最后由 guoqp 于 2024-1-10 14:52 编辑

不知道什么原因,我也不好去复现,现在问题出现了,找不到解决办法,其他列筛选都没有问题,就这列一筛选就出问题,为了方便查看问题,我录了屏.


"设计阶段"列筛选前是这个效果

"设计阶段"列筛选后是这个效果,不知道哪里出了问题,也不知道该如何去跟踪问题所在


=========================================================================
经过不断尝试,我找到了问题所在,是因为"设计阶段"这列使用组合框,且组合框的数据绑定使用了分组


组合框绑定我举例说明
如表有A,B,C三列
数据如下
AAA,BBB,CCC
BBB,AAA,123
CCC,123,ABC
AAA,123,BBB
BBB,AAA,ABC
CCC,ABC,123

组合框值与显示列都绑定的A列,可以看到A列中的数据其实是有重复的,这里重复多少次上边筛选出来就会重复多少行。
可以完整的复现出来


我用DEMO复现出来了,你们参考下

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

13 个回复

正序浏览
Simon.Sun活字格认证 Wyn认证
超级版主   /  发表于:2024-1-17 12:08:56
14#
嗯,好的。后面有问题也欢迎您继续发帖交流
回复 使用道具 举报
guoqp
高级会员   /  发表于:2024-1-17 12:07:21
13#
Simon.Sun 发表于 2024-1-17 11:48
好的,大佬。分类不通过下拉来输入,就设置为普通的单元格。输入分类时通过右侧的按钮点击弹出页面选择,选 ...

这样操作不方便,以前我们就考虑过这种方式,后来大家反应用起来还没有现在的下拉框方便,我改成专业一对多(单行记录)这种方式吧
回复 使用道具 举报
Simon.Sun活字格认证 Wyn认证
超级版主   /  发表于:2024-1-17 11:48:53
12#
好的,大佬。分类不通过下拉来输入,就设置为普通的单元格。输入分类时通过右侧的按钮点击弹出页面选择,选择完后在回传到表格中。
这样操作起来会麻烦些,这样是否可以?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
guoqp
高级会员   /  发表于:2024-1-17 11:00:56
11#
Simon.Sun 发表于 2024-1-17 09:33
大佬好。您说的这个情况确实存在,对于组合框,表格数据在展示的时候目前是通过左连接带出显示数据的。因为 ...

不太行,我们可以从业务上来梳理
公司有N个部门,每个部门有N个专业,作为员工在录入数据的时候关心的是我应该选哪个专业,而全公司总共也就那么十来个专业,自己部门的专业可能也就那么几个,如果每一个专业要明确到ID,不加部门作为条件,那只有一种可能,就是每个部门的专业都是不同的ID,比如工艺室的管道专业与管道室的管道专业就变成两个专业了,这不是我们想要的效果

如果按你这个思路来说,只有把专业与部门的对应关系不做成多行记录,而做成一行,比如每个专业就只能是一行,但专业对应的部门可以是多个,也就是把多个部门放在一块,查询的时候使用模糊匹配,这样倒是可以 解决

但我们既然发现了问题,就看看有没有什么更为合理的解决办法(比如左联的时候能否把数据源的查询条件也带进去,这样是不是能避免),如果实在没有办法解决,那我们就用变通的办法来适应它
回复 使用道具 举报
Simon.Sun活字格认证 Wyn认证
超级版主   /  发表于:2024-1-17 09:33:16
10#
本帖最后由 Simon.Sun 于 2024-1-17 09:36 编辑

大佬好。您说的这个情况确实存在,对于组合框,表格数据在展示的时候目前是通过左连接带出显示数据的。因为考虑到值字段和显示字段不统一的情况。
您这个情况有些特殊,值字段和显示字段是同一个字段,而且值字段会有重复的情况,当然并不是说您的这个场景不合理。
我觉得更好的做法是表2分类字段来存储字典表的 ID,保证组合框的值字段是唯一了,这样就能避免这个问题了,您觉得是否可行呢?
回复 使用道具 举报
guoqp
高级会员   /  发表于:2024-1-16 10:28:00
9#
Patrick.Zhu 发表于 2024-1-16 10:02
大佬,我想先问一下,你为啥这么设计,因为这个设计阶段一看就应该是一个单独的字典表维护的工序,你引用的 ...

我研究下活字格的筛选SQL,根本问题在于活字格在筛选时不应该去左联字段列组件的数据源,只要把这个解决了就不存在这个问题了
回复 使用道具 举报
guoqp
高级会员   /  发表于:2024-1-16 10:26:22
8#
Patrick.Zhu 发表于 2024-1-16 10:02
大佬,我想先问一下,你为啥这么设计,因为这个设计阶段一看就应该是一个单独的字典表维护的工序,你引用的 ...

是的,阶段与专业都来自于一个字典表,阶段还好,哪怕设为固定值都没有问题,但专业就不行了,一个专业有可能要对应好几个部门,也就是说不同的部门有不同的专业,所以单独维护这个字典表也需要加上部门这个查询条件,你可以看上边这个DEMO就是一个真实的场景,如果将全部专业都放出来这不合适,因为人家根本不参与这些专业,放出来反而不好用,不放出来就得用部门作为条件去过滤,所以就存在上边所说的问题
回复 使用道具 举报
Patrick.Zhu
银牌会员   /  发表于:2024-1-16 10:02:31
7#
大佬,我想先问一下,你为啥这么设计,因为这个设计阶段一看就应该是一个单独的字典表维护的工序,你引用的那个表里面是什么内容呢?

提前解释下为什么要问这个问题,因为看起来,一开始采用一个单独的字典表进行维护更合适你的场景。
回复 使用道具 举报
guoqp
高级会员   /  发表于:2024-1-16 09:21:58
6#
本帖最后由 guoqp 于 2024-1-16 09:40 编辑
Simon.Sun 发表于 2024-1-15 09:27
您好,是这样的,组合框本身是会去重的。但是放到表格里,表格去查询数据的时候是会有关联查询的。因为组合 ...

我发现按你这个方法,只适用于单列唯一值的情况(只是一列),如果我们需求场景是需要有两列,其中一列进行条件筛选时就不行了(比如我需要的专业列,但不同的部门看到的应该是不同的专业,所以我们要加入部门列作为查询条件,这时就会出现重复,比如我有四个部门都有管道专业,那就会重复4次)

这里我想说的是,其实根本问题在于,表格的列筛选为什么要去左联该列组件的数据源,跟组件的数据源有什么逻辑关系?我们筛选是在本数据表的值中筛选,去左联一个供用户选择的组件的数据源作为筛选选件这个就有点看不懂了,我觉得这个就是一个软件设计的BUG

下边用一个筛选后的SQL来说明
select  
        a.[图纸名称] as C0,a.[图纸编号] as C1,a.[图幅] as C2,a.[数量] as C3,a.[设备位号] as C4,a.[设计人员] as C5,a.[校核人员] as C6,a.[审核人员] as C7,a.[审定人员] as C8,a.[定额编码] as C9,
        a.[定额单位] as C10,a.[单位数量] as C11,a.[定额工时] as C12,a.[设计阶段] as C13,a.[专业] as C14,a.[子项] as C15,a1.[项目名称] as C16,a.[部门] as C17,a.[项目编号] as C18,a.[标准工时] as C19,
        a.[定额项] as C20,a.[ID] as C21,a.[FGC_Rowversion] as C22
from [dbo].[定额工时数据表_中石油版] as a  
        left join [dbo].[项目分配表] as a1 on a.[项目编号] = a1.[项目编号]
        left join [dbo].[定额工时专业视图] as a2 on a.[专业] = a2.[专业]
Where a.[年度] = @p0 AND a.[项目编号] = @p1 AND a.[部门] = @p2 AND a2.[专业] = @p3  
ORDER BY a.[图纸编号] ASC,a.[ID] ASC

这最后一个left join [dbo].[定额工时专业视图] as a2 on a.[专业] = a2.[专业] 完全是多余的,与数据表没有半点逻辑关系,这只是供用户选择该字段值的一个下拉组件的数据源而已

我也上一个DEMO吧

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部