Power Apps中Days语法无效及日历颜色同步问题求助
Power Apps 开发问题解决方案
问题1:DateAdd 中 'Days' 语法无效的替代方案
Power Apps 里 DateAdd 函数的时间单位需使用枚举值 DateTimeUnit.Days,而非直接写 Days。修改后的代码如下:
ClearCollect( DateCollection, ForAll( Sequence(Day(DateAdd(Today(), 1, DateTimeUnit.Months)) - Day(Today())), { Date: DateAdd(DateAdd(Today(), -Day(Today()) + 1, DateTimeUnit.Days), Value, DateTimeUnit.Days), Color: LookUp(CalendarEvents, EventDate = DateAdd(DateAdd(Today(), -Day(Today()) + 1, DateTimeUnit.Days), Value, DateTimeUnit.Days), Color) } ) );
如果需要生成当月所有日期(而非从当前日到月底),可把 Sequence 的参数改为更准确的写法:Sequence(Day(DateSerial(Year(Today()), Month(Today())+1, 0))),这样能直接获取当月总天数。
问题2:日历瓷砖颜色与选择状态不同步的解决方法
核心问题
DateCollection仅在页面OnVisible时加载,用户保存新事件后未刷新集合,新数据无法同步;- 日期比较可能存在时间部分差异(比如
EventDate包含时间,生成的Date是纯日期),导致LookUp匹配失败; - 瓷砖颜色的
LookUp用了固定日期字符串,无法动态匹配对应日期。
分步解决
- 修改保存按钮代码,同步刷新集合
保存事件后立即刷新DateCollection,确保新数据生效:
Collect(CalendarEvents, { EventDate: DateValue(Text(DatePickerCanvas1_1.SelectedDate, "yyyy-mm-dd")), // 强制存储纯日期,避免时间干扰 Status: StatusList.Selected.Value, Color: Switch( StatusList.Selected.Value, "Kein Ereignis/Unfall", ColorValue("#30D99B"), "Medizinische Behandlung", ColorValue("#F29F05") // 新增状态继续补充 ) }); // 保存后刷新集合 ClearCollect( DateCollection, ForAll( Sequence(Day(DateSerial(Year(Today()), Month(Today())+1, 0))), { Date: DateAdd(DateSerial(Year(Today()), Month(Today()), 1), Value-1, DateTimeUnit.Days), Color: LookUp(CalendarEvents, EventDate = DateAdd(DateSerial(Year(Today()), Month(Today()), 1), Value-1, DateTimeUnit.Days), Color, ColorValue("#FFFFFF")) // 默认白色 } ) ); Navigate(SafetyCross);
- 修改瓷砖颜色公式
- 如果瓷砖是画廊控件的一部分:直接用
ThisItem.Color - 如果是独立瓷砖:把固定日期替换为瓷砖对应的动态日期,比如
LookUp(CalendarEvents, EventDate = DateValue(Text(Today(), "yyyy-mm-dd")), Color, ColorValue("#FFFFFF"))
- 优化页面 OnVisible 逻辑
确保页面加载时正确生成当月所有日期的集合:
ClearCollect( DateCollection, ForAll( Sequence(Day(DateSerial(Year(Today()), Month(Today())+1, 0))), { Date: DateAdd(DateSerial(Year(Today()), Month(Today()), 1), Value-1, DateTimeUnit.Days), Color: LookUp(CalendarEvents, EventDate = DateAdd(DateSerial(Year(Today()), Month(Today()), 1), Value-1, DateTimeUnit.Days), Color, ColorValue("#FFFFFF")) } ) );
内容的提问来源于stack exchange,提问作者Thejazzstercaz
相关产品推荐
相关产品推荐

