如何在Power Apps中创建互斥过滤器(选中一个禁用另外两个)
Power Apps 实现互斥过滤器的正确方案
一、修正按钮的点击逻辑
你之前的错误在于把变量互斥控制和数据过滤混在了画廊的Items属性里,正确的做法是在按钮点击时直接处理上下文变量的互斥:
按钮1(AA过滤器)的
OnSelect:UpdateContext({ FilterbyAA: !FilterbyAA, FilterbyBB: false, FilterbyCC: false })(如果需要点击已选中的AA按钮时取消所有过滤,改成下面的写法:)
UpdateContext({ FilterbyAA: !FilterbyAA, FilterbyBB: If(FilterbyAA, false, FilterbyBB), FilterbyCC: If(FilterbyAA, false, FilterbyCC) })按钮2(BB过滤器)的
OnSelect:UpdateContext({ FilterbyBB: !FilterbyBB, FilterbyAA: false, FilterbyCC: false })按钮3(CC过滤器)的
OnSelect:UpdateContext({ FilterbyCC: !FilterbyCC, FilterbyAA: false, FilterbyBB: false })
二、简化画廊的过滤逻辑
原来的嵌套If可以简化成更易读的写法:
写法一:用逻辑运算符合并条件
Filter( EVENTDETAILS, TYPE = "Once Off", (FilterbyAA && PILLAR.Value = "AA") || (FilterbyBB && PILLAR.Value = "BB") || (FilterbyCC && PILLAR.Value = "CC") || (!FilterbyAA && !FilterbyBB && !FilterbyCC) )
写法二:用Switch更清晰
Switch( true, FilterbyAA, Filter(EVENTDETAILS, TYPE = "Once Off", PILLAR.Value = "AA"), FilterbyBB, Filter(EVENTDETAILS, TYPE = "Once Off", PILLAR.Value = "BB"), FilterbyCC, Filter(EVENTDETAILS, TYPE = "Once Off", PILLAR.Value = "CC"), Filter(EVENTDETAILS, TYPE = "Once Off") )
三、你之前代码失效的原因
你在画廊Items里写的Filter(...) AND FilterbyBB=false是错误的:
Filter()返回的是数据集,FilterbyBB=false是布尔值,两者不能用AND连接- 变量赋值(比如把FilterbyBB设为false)必须在按钮的
OnSelect里执行,不能放在过滤数据的逻辑中
内容的提问来源于stack exchange,提问作者Michelle
相关产品推荐
相关产品推荐

