在 Power Apps 中编辑窗体和显示窗体控件

在数据源中显示、编辑和创建记录。

Description

如果添加 “显示”窗体 控件,则用户可以显示记录的所有字段或仅显示指定的字段。 如果添加 “编辑”窗体 控件,用户可以编辑这些字段、创建记录并将这些更改保存到数据源。

示例窗体和窗体视图控件。

如果添加 控件,则可以将其配置为在数据源中显示表,然后配置窗体以显示用户在库中选择的记录。 还可以添加一个或多个 按钮 控件,用户可以选择该控件来保存编辑、取消编辑和创建记录。 通过将控件一起使用,可以 创建完整的解决方案

局限性

窗体控件具有以下限制:

  • 无法将表单复制并粘贴到数据卡中。 这是为了防止创建某些控件组合,从而危及应用的稳定性和性能。

记录选择

对于任一类型的窗体,请将其 DataSource 属性设置为记录表,并将窗体的 Item 属性设置为在该表中显示特定记录。 例如,可以将窗体的 Item 属性设置为控件的 SelectedItem 属性。 当用户在库中选择记录时,窗体中会显示相同的记录,但窗体可以显示更多字段。 如果用户返回库并选择其他记录,库的 SelectedItem 属性将更改。 此更改将更新窗体的 Item 属性,然后显示新选择的记录。

还可以通过使用下拉列表控件来设置窗体的 Item 属性,如“显示”、“编辑”或“添加记录描述”或“查找”或“第一”等函数。 例如,可以将 Item 属性设置为以下任一公式,以在 Microsoft Dataverse 的 Accounts 表中显示 Fabrikam 条目:

First(Accounts)

Lookup(Accounts, "Fabrikam" in name)

每个窗体控件都包含一个或多个 卡片 控件。 通过设置卡片的 DataField 属性,可以 指定卡片显示哪些字段和其他详细信息

创建记录

“编辑”窗体 控件处于 “编辑 ”模式时,用户可以更新窗体的 Item 属性中指定的记录。 如果检查了, Mode 属性将返回 “编辑”。

但是,当 “编辑”窗体 控件处于 “新建 ”模式时, 将忽略 Item 属性。 窗体不显示现有记录;相反,每个字段中的值与配置窗体的数据源的默认值匹配。 NewForm 函数导致窗体切换到此模式。

例如,可以将按钮的 Text 属性设置为包含 NewForm 函数的公式,以显示 New 及其 OnSelect 属性。 如果用户选择该按钮,窗体将切换到 “新建 ”模式,以便用户可以创建以已知值开头的记录。

如果 ResetForm 函数运行或 SubmitForm 函数成功运行,窗体将切换回编辑模式。

  • 可以将按钮的 Text 属性设置为包含 ResetForm 函数的公式,以显示 Cancel 及其 OnSelect 属性。 如果用户选择该按钮,则放弃正在进行的任何更改,并且窗体中的值再次与数据源的默认值匹配。
  • 你可以将按钮的 Text 属性设置为包含 SubmitForm 函数的公式,以显示“保存更改”及其 OnSelect 属性。 如果用户选择该按钮并更新数据源,窗体中的值将重置为数据源的默认值。

保存更改

如果按上一部分所述创建 “保存更改 ”按钮,用户可以创建或更新记录,然后选择该按钮以将这些更改保存到数据源。 可以改为将 图像 控件或其他控件配置为执行相同的任务,前提是使用 SubmitForm 函数配置该控件。 在任何情况下, ErrorErrorKindOnSuccessOnFailure 属性都会提供有关结果的反馈。

SubmitForm 函数运行时,它首先验证用户想要提交的数据。 如果必填字段不包含值或另一个值不符合其他约束,则设置 ErrorKind 属性,并且 OnFailure 公式运行。 可以配置 “保存更改 ”按钮或其他控件,以便用户仅当数据有效(即窗体 的有效 属性 为 true 时)才能选择它。 请注意,用户不仅必须更正该问题,而且必须再次选择 “保存更改 ”按钮(或者通过选择 “取消 ”按钮来放弃更改,如前所述)重置 Error和 ErrorKind 属性。

如果数据通过验证, SubmitForm 会将其发送到数据源,这可能需要一些时间,具体取决于网络延迟。

  • 如果提交成功,则清除 Error 属性,ErrorKind 属性设置为 ErrorKind.None,OnSuccess 公式运行。 如果用户创建了一条记录(即,如果窗体以前处于 “新建 ”模式),则窗体将切换到 “编辑 ”模式,以便用户可以编辑新创建的记录或其他记录。
  • 如果提交失败, 则 Error 属性包含来自数据源的用户友好错误消息,说明问题。 根据问题设置 ErrorKind 属性, OnFailure 公式运行。

某些数据源可以检测两个人尝试同时更新同一记录的时间。在这种情况下, ErrorKind 设置为 ErrorKind.Conflict,解决方法是使用其他用户的更改刷新数据源,并重新应用此用户所做的更改。

小窍门

如果你在窗体上提供 “取消” 按钮,以便用户可以放弃正在进行的更改,请将 ResetForm 函数添加到按钮的 OnSelect 属性,即使该属性还包含 一个 Navigate 函数来更改屏幕。 否则,窗体将保留用户的更改。

版式

默认情况下,卡片放置在手机应用的单个列中,平板电脑应用的三列。 可以指定窗体具有的列数以及卡片在配置窗体时是否应贴靠这些列。 这些设置不公开为属性,因为它们仅用于设置卡片的 XYWidth 属性。

有关详细信息,请参阅 “了解数据窗体布局”。

键属性

DataSource – 包含用户将显示、编辑或创建的记录的数据源。

  • 如果未设置此属性,则用户无法显示、编辑或创建记录,并且未提供其他元数据或验证。

DefaultMode - 窗体控件的初始模式。 有关可接受的值及其含义,请参阅下面的 模式 说明。

DisplayMode - 用于窗体控件中的数据卡和控件的模式。

派生自基于 Mode 属性,不能单独设置:

模式 DisplayMode Description
FormMode.Edit DisplayMode.Edit 数据卡和控件是可编辑的,可以接受对记录的更改。
FormMode.New DisplayMode.Edit 数据卡和控件可编辑,可接受新记录。
FormMode.View DisplayMode.View 数据卡和控件不可编辑和优化以查看。

错误当 SubmitForm 函数失败时,要显示此表单的用户友好错误消息。

  • 此属性仅适用于 “编辑”窗体 控件。
  • 此属性仅在 SubmitFormEditFormResetForm 函数运行时更改。
  • 如果未发生错误,则此属性为ErrorKind 设置为 ErrorKind.None
  • 如果可能,返回的错误消息将以用户的语言提供。 某些错误消息直接来自数据源,可能不是用户的语言。

ErrorKind – 如果 SubmitForm 运行时发生错误,则发生错误的类型。

  • 仅适用于 “编辑”窗体 控件。
  • 此属性的枚举与 Errors 函数相同。 编辑窗体控件可以返回以下值:
ErrorKind Description
ErrorKind.Conflict 另一个用户更改了同一记录,导致更改冲突。 执行 Refresh 函数以重新加载记录,然后重试更改。
ErrorKind.None 此错误的类型未知。
ErrorKind.Sync 数据源报告了错误。 有关详细信息,请查看 Error 属性。
ErrorKind.Validation 检测到常规验证问题。

ItemDataSource 中用户将显示或编辑的记录。

LastSubmit – 上次成功提交的记录,包括任何服务器生成的字段。

  • 此属性仅适用于 “编辑”窗体 控件。
  • 如果数据源自动生成或计算任何字段(例如具有唯一数字的 ID 字段), 则 LastSubmit 属性将在 SubmitForm 成功运行后具有此新值。
  • 此属性的值在 OnSuccess 公式中可用。

模式 – 控件处于 “编辑”“新建 ”模式。

模式 Description
FormMode.Edit 用户可以使用表单编辑记录。 表单卡片中的值已预先填充现有记录,供用户更改。 如果 SubmitForm 函数成功运行,则会修改现有记录。
FormMode.New 用户可以使用表单创建记录。 窗体控件中的值预先填充数据源记录的默认值。 如果 SubmitForm 函数成功运行,则会创建一条记录。
FormMode.View 用户可以使用表单查看记录。 窗体控件中的值预先填充数据源记录的默认值。

当发生以下任一更改时,窗体将从 “新建 ”模式切换到 “编辑 ”模式:

  • 表单已成功提交,并创建了一条记录。 如果库设置为自动将所选内容移动到此新记录,则窗体将处于已创建记录的 编辑 模式,以便用户可以进行其他更改。
  • EditForm 函数运行。
  • ResetForm 函数运行。 例如,用户可以选择使用此函数配置的 “取消” 按钮。

OnFailure – 在数据作失败时要执行的作。

  • 此属性仅适用于 “编辑”窗体 控件。

OnReset – 重置 编辑窗体 控件时要执行的作。

  • 此属性仅适用于 “编辑”窗体 控件。

OnSuccess – 数据作成功时要执行的作。

  • 此属性仅适用于 “编辑”窗体 控件。

未保存 – 如此 如果 “编辑”窗体 控件包含尚未保存的用户更改。

  • 此属性仅适用于 “编辑”窗体 控件。
  • 在用户丢失任何未保存的更改之前,请使用此属性警告用户。 若要防止用户在 更改保存到当前记录之前在库控件中选择其他记录,请将库的 Disabled 属性设置为 Form.Unsaved ,同样,禁用刷新作。

更新 – 要写回窗体控件中加载的记录的数据源的值。

  • 此属性仅适用于 “编辑”窗体 控件。
  • 使用此属性可从控件中的卡片中提取字段值。 然后,可以使用这些值通过 Patch 函数调用或连接公开的其他方法手动更新数据源。 如果使用 SubmitForm 函数,则无需使用此属性。
  • 此属性返回值的记录。 例如,如果窗体控件包含 NameQuantity 字段的卡片控件,并且这些卡片的 Update 属性的值分别返回“Widget”和 10,则窗体控件的 Updates 属性将返回 { Name: “Widget”, Quantity: 10 }

有效卡片编辑表单 控件是否包含有效的条目,准备提交到数据源。

  • 此属性仅适用于 “编辑”窗体 控件。

  • 窗体控件的有效属性聚合窗体中所有卡片控件的有效属性。 仅当表单中的所有卡片中的数据有效时,窗体 的 Valid 属性才 为 true ;否则,窗体 的有效 属性为 false

  • 若要使按钮仅在表单中的数据有效但尚未提交时保存更改,请将按钮的 DisplayMode 属性设置为以下公式:

    SubmitButton.DisplayMode = If(IsBlank(Form.Error) ||Form.Valid、DisplayMode.Edit、DisplayMode.Disabled)

其他属性

BorderColor – 控件边框的颜色。

BorderStyle – 控件的边框是 SolidDashedDotted 还是 None

BorderThickness – 控件边框的粗细。

填充 – 控件的背景色。

高度 – 控件的上边缘和下边缘之间的距离。

可见 – 控件是显示还是隐藏。

宽度 – 控件的左边缘和右边缘之间的距离。

X – 控件的左边缘与其父容器的左边缘之间的距离(如果没有父容器时显示屏幕)。

Y – 控件的上边缘与父容器的上边缘之间的距离(如果没有父容器时屏幕)。

详细信息

辅助功能指南

屏幕阅读器支持

  • 请考虑使用 标签向窗体添加标题。