Power Apps:如何遍历重复表格式Gallery的所有用户生成行?
问题:Power Apps重复表格(Repeating Table)遍历问题
我有一个**重复表格(repeating table)**结构的Gallery,包含姓名和邮箱两个文本输入框。用户可点击Gallery外的加号图标生成包含这两个输入框的新行,支持多次点击生成多行。
原本尝试通过ForAll(galleryName.AllItems, [...])遍历每个输入框,将每组姓名和邮箱写入后端SharePoint列表,但发现.AllItems仅遍历Gallery的原始组成成员,与用户实际看到的重复行数量不符(例如生成100行后,galleryName.AllItems仍只返回原始行数)。
最终目标是实现类似以下代码的功能:
ForAll(galleryName.AllItems As gal, // 无效,因为AllItems不符合需求 Patch('My SharePoint List', Defaults('My SharePoint List'), {Name: gal.txtInputThatHoldsTheName.Text, Email: gal.txtInputThatHoldsTheEmail.Text}))
解决方案
核心问题在于依赖Gallery的.AllItems属性错误——该属性仅引用Gallery绑定的原始数据源,用户新增的重复行并未同步到原始数据源中。正确的方案是使用**集合(Collection)**作为Gallery的数据源,所有新增、编辑操作直接操作集合,最终遍历集合完成SharePoint写入。
具体实现步骤:
- 初始化集合:在App的
OnStart或屏幕的OnVisible事件中初始化空集合,用于存储所有重复行数据:ClearCollect(colRepeatingRows, {Name: "", Email: ""}) - 绑定Gallery数据源:将Gallery的
Items属性设置为colRepeatingRows。 - 绑定输入框数据:把Gallery内的姓名输入框
Text属性设为ThisItem.Name,邮箱输入框Text属性设为ThisItem.Email,实现输入与集合的双向同步。 - 新增行逻辑:将加号图标的
OnSelect事件设置为向集合添加空行:Collect(colRepeatingRows, {Name: "", Email: ""}) - 批量写入SharePoint:直接遍历集合
colRepeatingRows执行Patch操作,代码如下:ForAll(colRepeatingRows As row, Patch('My SharePoint List', Defaults('My SharePoint List'), {Name: row.Name, Email: row.Email}))
额外优化提示:
- 若需支持删除行,可在Gallery内添加删除按钮,将其
OnSelect事件设置为Remove(colRepeatingRows, ThisItem)。 - 集合会实时同步用户输入,无需额外处理输入框的更新逻辑,可靠性远高于直接操作Gallery控件。
内容的提问来源于stack exchange,提问作者J. Mini
相关产品推荐
相关产品推荐

