Power Apps Patch仅同步前55行数据问题求助
问题根源
Power Apps的Gallery控件为了性能优化,只会渲染当前可见区域内的控件,未滚动到的行对应的控件不会被完全加载。直接通过ThisRecord.IS2_TI_SourceAlt1.Text这类方式读取控件值时,未渲染的控件会返回空白——即便你手动滚动到过底部,执行Patch时这些控件可能已经被卸载,导致值丢失。
解决方案
1. 从数据源集合读取值(推荐)
你的Gallery数据源是colInternalProcessed,集合里已经保存了完整的SourceAlt、DestAlt、ExactCross等值,完全不需要通过Gallery控件的Text属性读取,直接用集合字段即可。修改后的代码如下:
ForAll( // 关联集合和Gallery的复选框状态,筛选不需要删除的记录 Filter( AddColumns( colInternalProcessed, "IsDelete", LookUp(IS2_Gallery1.AllItems, ID = colInternalProcessed[@ID], IS2_Checkbox_Delete.Checked) ), !IsDelete && !IsBlank(SourceAlt) ), Patch( 'OBC Stage Table', Defaults('OBC Stage Table'), { _SourceAlt: SourceAlt, _DestAlt: DestAlt, _ExactCross: ExactCross, _SubmitEmail: useremail, _SubmitName: username } ) );
注意:如果
colInternalProcessed没有ID字段,用集合里唯一标识每条记录的字段替换,确保能和Gallery的AllItems对应上。
2. 改用批量创建提升效率(可选)
如果你的SharePoint列表支持批量操作,用Collect代替循环Patch会更高效,也能避免循环带来的控件渲染问题:
Collect( 'OBC Stage Table', ForAll( Filter( AddColumns( colInternalProcessed, "IsDelete", LookUp(IS2_Gallery1.AllItems, ID = colInternalProcessed[@ID], IS2_Checkbox_Delete.Checked) ), !IsDelete && !IsBlank(SourceAlt) ), { _SourceAlt: SourceAlt, _DestAlt: DestAlt, _ExactCross: ExactCross, _SubmitEmail: useremail, _SubmitName: username } ) );
3. 强制Gallery渲染所有控件(临时方案)
如果必须使用Gallery控件的值,可以在执行Patch前强制滚动Gallery到所有行,确保控件都被渲染:
// 先滚动到Gallery底部 IS2_Gallery1.ScrollTo(IS2_Gallery1.AllItemsCount); // 延迟执行Patch,确保渲染完成 Delay(1000); // 执行原Patch逻辑(不推荐,性能差) ForAll( Filter(IS2_Gallery1.AllItems, !(IS2_Checkbox_Delete.Checked)), Patch( 'OBC Stage Table', Defaults('OBC Stage Table'), { _SourceAlt: ThisRecord.IS2_TI_SourceAlt1.Text, _DestAlt: ThisRecord.IS2_TI_DestAlt1.Text, _ExactCross: ThisRecord.IS2_TI_ExactCross1.Text, _SubmitEmail: useremail, _SubmitName: username } ) );
额外排查点
- 打开
View > Collections检查colInternalProcessed是否包含所有行的完整数据 - 确认SharePoint列表的字段类型和集合字段类型匹配,避免类型转换导致空白
- 排查是否有其他逻辑在修改
colInternalProcessed集合,导致部分行数据丢失
内容的提问来源于stack exchange,提问作者T. Hughes
相关产品推荐
相关产品推荐

