Power Apps Canvas应用分页无数据显示且存在委托警告问题
问题排查与解决方案
核心问题定位
你的代码存在语法错误,同时隐藏画廊的加载限制也会导致大表数据无法完整获取,具体问题如下:
1. 数据显示画廊Items语法逻辑错误
你在FirstN和LastN的参数里错误用了=赋值运算符,而非算术运算计算分页范围:
FirstN(..., drp_Pagination.Selected.Value = varPageNum)是赋值操作,无法正确计算前N条记录数,应该改为drp_Pagination.Selected.Value * varPageNum- 最后一页的
LastN参数里,drp_Pagination.Selected.Value = (...)同样是赋值逻辑,应该改为计算剩余记录数的算术表达式
2. 隐藏画廊的加载上限限制
Canvas应用画廊默认最多加载2000条记录(可调整至5000),但你的表有12万条数据,gal_NewCaseAgenHidden.AllItems只能获取前2000/5000条,后续记录无法加载,直接导致分页失效,同时触发委托警告。
3. 委托警告的根源
CountRows(gal_NewCaseAgenHidden.AllItems)会触发委托警告,因为AllItems是客户端集合,而Dataverse的Count函数是可委托的,应该直接基于数据源计算总记录数。
修正后的代码方案
方案一:修复原有隐藏画廊分页逻辑(适用于小数据集)
1. 隐藏画廊gal_NewCaseAgenHidden的Items(保留原过滤逻辑)
Filter( AgenGenNewCases, StartsWith('Policy Number', txt_policyNumberNewCase.Text) && (IsBlank(drp_CStatus.Selected.Value) || 'Case Status' = drp_CStatus.Selected.Value) )
2. 数据显示画廊gal_NewCaseAgenGen的Items(修正算术逻辑)
With( { pageSize: drp_Pagination.Selected.Value, totalRecords: Value(lbl_CountNewCase.Text) }, If( varPageNum * pageSize > totalRecords, // 最后一页:取剩余记录 LastN( FirstN(gal_NewCaseAgenHidden.AllItems, totalRecords), totalRecords - (varPageNum - 1) * pageSize ), // 常规页:取当前页指定条数 LastN( FirstN(gal_NewCaseAgenHidden.AllItems, varPageNum * pageSize), pageSize ) ) )
3. 更新lbl_CountNewCase的Text属性(替换为可委托的Count)
Count( Filter( AgenGenNewCases, StartsWith('Policy Number', txt_policyNumberNewCase.Text) && (IsBlank(drp_CStatus.Selected.Value) || 'Case Status' = drp_CStatus.Selected.Value) ) )
方案二:服务器端分页(推荐用于12万条大数据集)
直接用Skip+Take在Dataverse数据源上处理分页,无需依赖隐藏画廊,完全规避加载上限和委托问题:
// 数据显示画廊的Items直接使用此代码 With( { filteredData: Filter( AgenGenNewCases, StartsWith('Policy Number', txt_policyNumberNewCase.Text) && (IsBlank(drp_CStatus.Selected.Value) || 'Case Status' = drp_CStatus.Selected.Value) ), pageSize: drp_Pagination.Selected.Value }, Skip(filteredData, (varPageNum - 1) * pageSize) |> Take(pageSize) )
同时lbl_CountNewCase的代码沿用方案一中的Count函数即可。
额外检查项
- 确认
varPageNum初始值为1,分页按钮逻辑正确:上一页减1(需限制varPageNum >=1),下一页加1(需限制varPageNum <= RoundUp(Value(lbl_CountNewCase.Text)/drp_Pagination.Selected.Value, 0)) - 检查
drp_Pagination的选项为纯数字(如10、20、50),确保Selected.Value是数值类型 - 确认
'Case Status'字段类型与drp_CStatus.Selected.Value匹配(如均为选项集值或文本)
内容的提问来源于stack exchange,提问作者ZeroCool
相关产品推荐
相关产品推荐

