Power Apps 中的編輯表單和顯示表單控制項
顯示、編輯和建立資料來源中的記錄。
描述
如果您新增顯示表單控制項,使用者可以顯示記錄的所有欄位或只有您指定的欄位。 如果您新增編輯表單控制項,使用者可以編輯這些欄位、建立一筆記錄,以及將這些變更儲存到資料來源。
如果您新增**資源庫** 控制項,您可以設定它顯示資料來源中的資料表,然後設定表單顯示使用者在資源庫中選取的記錄。 您也可以新增一個或多個**按鈕** 控制項,使用者藉此選取它們儲存編輯、取消編輯,以及建立一筆記錄。 藉由一起使用控制項,您可 建立完整解決方案。
限制
表單控制項具有下列限制:
- 您無法將表單複製並貼上到資料卡。 這是為了防止建立某些可能危及應用程式穩定性和效能的控制項組合。
選取記錄
針對任一類型的表單,您可以將其 DataSource 屬性設定為記錄資料表,並設定表單的 Item 屬性顯示該資料表中的特定記錄。 例如您可以將表單的 Item 屬性設定為**資源庫** 控制項的 SelectedItem 屬性。 使用者選取資源庫中的記錄時,相同記錄會出現在表單中,除了表單可以顯示更多欄位以外。 如果使用者返回資源庫及選取不同記錄,則資源庫的 SelectedItem 屬性會隨之變更。 這項變更會更新表單的 Item 屬性,接著顯示新選取的記錄。
您也可以使用下拉式選單控制項設定表單的 Item 屬性,如 顯示、編輯或新增記錄 所述,或是使用如 Lookup 或 First 等函數。 例如,您可以將 Item 屬性設為下列公式之一,來顯示 Microsoft Dataverse 中帳戶資料表的 Fabrikam 項目:
First(Accounts)
Lookup(Accounts, "Fabrikam" in name)
每個表單控制項都會包含一個或多個**卡片** 控制項。 藉由設定卡片的 DataField 屬性,您可 指明卡片顯示的欄位和其他詳細資料。
建立記錄
當編輯表單控制項處於編輯模式時,使用者可以更新表單的 Item 屬性中指定的記錄。 查驗後,Mode 屬性會傳回 Edit。
不過,當編輯表單控制項在新增模式時,會忽略 Item 屬性。 表單不會顯示現有記錄;相反地,每個欄位值都會符合您用來設定表單的資料來源的預設值。 NewForm 函數會讓表單切換到此模式。
例如,您可以設定按鈕的**Text** 屬性顯示 New,並將其 OnSelect 屬性設定為包含 NewForm 函數的公式。 如果使用者選取該按鈕,表單會切換成 新增 模式,讓使用者可以建立從已知值開始的記錄。
如果執行 ResetForm 函數或成功執行 SubmitForm 函數,表單會切換回 編輯 模式。
- 您可以設定按鈕的**Text** 屬性顯示取消,並將其 OnSelect 屬性設定為包含 ResetForm 函數的公式。 如果使用者選取該按鈕,會捨棄任何進行中的變更,而且表單中的值同樣會符合資料來源的預設值。
- 您可以設定按鈕的**Text** 屬性顯示 Save changes,並將其 OnSelect 屬性設定為包含 SubmitForm 函數的公式。 如果使用者選取該按鈕並更新資料來源,會將表單中的值重設為資料來源的預設值。
儲存變更
如果您如前一節所述建立 Save changes 按鈕,使用者可以建立或更新記錄,然後選取該按鈕將這些變更儲存到資料來源。 相反地,只要設定**圖像** 控制項與 SubmitForm 函數,即可設定該控制項或一些其他控制項執行相同的工作。 在任何情況下,Error、ErrorKind、OnSuccess 和 OnFailure 屬性提供對結果的反饋意見。
當執行 SubmitForm 函數時,會先驗證使用者想要提交的資料。 如果必要欄位未包含值或另一個值不符合某個其他條件的約束,會設定 ErrorKind 屬性,並執行 OnFailure 公式。 您可以設定 Save changes 按鈕或其他控制項,讓使用者只有在資料有效時才能選取它 (亦即,如果表單的 Valid 屬性是 true)。 請注意,使用者不僅必須更正問題,還必須重新選取 Save changes 按鈕 (或選取 Cancel 按鈕捨棄變更,如先前所述) 以重設 Error 和 ErrorKind 屬性。
如果資料通過驗證,則 SubmitForm 會將它傳送給資料來源,而根據網路延遲,這可能需要一些時間。
- 如果提交成功,則會清除 Error 屬性、將 ErrorKind 屬性設定為 ErrorKind.None,並執行 OnSuccess 公式。 如果使用者已建立記錄 (亦即,如果表單先前處於 新增 模式),則表單會切換成 編輯 模式,讓使用者可以編輯新建立的記錄或不同的記錄。
- 如果提交失敗,Error 屬性會包含來自資料來源的使用者易記錯誤訊息,說明該問題。 根據問題適當設定 ErrorKind 屬性,並執行 OnFailure 公式。
某些資料來源可以偵測到兩個人同時嘗試更新相同記錄。在此情況下,ErrorKind 會設定為 ErrorKind.Conflict,補救方法是使用另一位使用者的變更重新整理資料來源,並重新套用這位使用者進行的變更。
提示
如果您在表單上提供 Cancel 按鈕,讓使用者可以放棄進行中的變更,請將 ResetForm 函數新增到按鈕的 OnSelect 屬性,該屬性甚至也會包含 Navigate 函數變更畫面控制項。 否則,表單將會保留使用者的變更。
版面配置
根據預設,卡片放置在電話應用程式的單一欄位和平板電腦應用程式的三個欄位中。 您可以指定表單有多少欄位及卡片是否應該在您設定表單時貼齊它們。 這些設定不會被公開為屬性,因為它們只用來設定卡片的 X、Y 和 Width 屬性。
如需詳細資訊,請參閱了解資料表單版面配置。
主要屬性
DataSource – 包含使用者將顯示、編輯或建立記錄的資料來源。
- 如果您未設定這個屬性,使用者就無法顯示、編輯或建立記錄,而且不會提供任何額外的中繼資料或驗證。
DefaultMode - 表單控制項的初始模式。 請參閱以下 Mode 的描述查看可接受值及其意義。
DisplayMode - 在表單控制項內適用資料卡和控制項的模式。
衍生自 Mode 屬性基礎,且無法獨立設定:
模式 | DisplayMode | 描述 |
---|---|---|
FormMode.Edit | DisplayMode.Edit | 資料卡片和控制項可以編輯,且準備好接受記錄的變更。 |
FormMode.New | DisplayMode.Edit | 資料卡片和控制項可以編輯,且準備好接受新記錄。 |
FormMode.View | DisplayMode.View | 資料卡片和控制項無法編輯和最佳化以供檢視。 |
Error – SubmitForm 函數失敗時,針對此表單所顯示的使用者易記錯誤訊息。
- 這個屬性僅適用編輯表單控制項。
- 只有在執行 SubmitForm、EditForm 或 ResetForm 函數時,這個屬性才會變更。
- 如果未發生錯誤,則這個屬性會 空白,而且 ErrorKind 會設定為 ErrorKind.None。
- 可能的話,傳回的錯誤訊息會是使用者的語言。 某些錯誤訊息直接來自資料來源,而且可能不是使用者的語言。
ErrorKind – 如果是在執行 SubmitForm 時發生錯誤,則為發生錯誤的類型。
- 僅適用編輯表單控制項。
- 這個屬性的列舉與 Errors 函數相同。 編輯表單控制項可以傳回這些值︰
ErrorKind | 描述 |
---|---|
ErrorKind.Conflict | 另一位使用者已變更同一筆記錄,因而導致變更衝突。 執行 Refresh 函數重新載入記錄,並重新嘗試變更。 |
ErrorKind.None | 錯誤是屬於未知類型。 |
ErrorKind.Sync | 資料來源已回報錯誤。 如需詳細資訊,請檢查 Error 屬性。 |
ErrorKind.Validation | 偵測到一般驗證問題。 |
Item – DataSource 中使用者將顯示或編輯的記錄。
LastSubmit – 最後一筆成功提交的記錄,包括任何伺服器產生的欄位。
- 這個屬性僅適用編輯表單控制項。
- 如果資料來源自動產生或計算任何欄位 (例如具有唯一號碼的 ID 欄位),則在成功執行 SubmitForm 之後,LastSubmit 屬性會有此新值。
- 這個屬性的值位於 OnSuccess 公式中。
Mode – 控制項處於編輯或新模式。
模式 | 描述 |
---|---|
FormMode.Edit | 使用者可以使用表單編輯記錄。 表單卡片中的值會預先填入現有記錄供使用者變更。 如果成功執行 SubmitForm 函數會修改現有記錄。 |
FormMode.New | 使用者可以使用表單建立記錄。 表單控制項中的值會預先填入資料來源中記錄的預設值。 如果成功執行 SubmitForm 函數,會建立記錄。 |
FormMode.View | 使用者可以使用表單檢視記錄。 表單控制項中的值會預先填入資料來源中記錄的預設值。 |
進行下列任何變更時,表單會從 New 模式切換成 Edit模式:
- 已成功提交表單,並建立記錄。 如果資源庫設定為自動將選取項目移到這筆新記錄,則針對建立的記錄,表單將會處於 Edit 模式讓使用者可以進行其他變更。
- 執行 EditForm 函數。
- 執行 ResetForm 函數。 例如,使用者可以選取已使用此函數設定的 Cancel 按鈕。
OnFailure – 當資料作業失敗時,要執行的動作。
- 這個屬性僅適用編輯表單控制項。
OnReset – 重新設定編輯表單控制項時要執行的動作。
- 這個屬性僅適用編輯表單控制項。
OnSuccess – 當資料作業成功時,要執行的動作。
- 這個屬性僅適用編輯表單控制項。
Unsaved – 如果編輯表單控制項包含尚未儲存的使用者變更,則為 true。
- 這個屬性僅適用編輯表單控制項。
- 使用這個屬性警告使用者,他們會遺失任何未儲存的變更。 若要防止使用者在儲存目前記錄的變更之前選取**資源庫** 控制項中的不同記錄,請將資源庫的 Disabled 屬性設定為 Form.Unsaved,同樣停用重新整理作業。
Updates – 寫回表單控制項中載入記錄的資料來源值。
- 這個屬性僅適用編輯表單控制項。
- 使用這個屬性從控制項內的卡片擷取欄位值。 您接著可以透過 Patch 函數呼叫或另一個經由連線公開的方法,使用這些值手動更新資料來源。 如果您使用 SubmitForm 函數,不需要使用這個屬性。
- 這個屬性會傳回值記錄。 例如,如果表單控制項包含 Name 和 Quantity 欄位的卡片控制項,而且這些卡片的 Update 屬性值分別傳回 "Widget" 和 10,則表單控制項的 Updates 屬性會傳回 { Name: "Widget", Quantity: 10 }。
Valid – 卡片 或編輯表單控制項是否包含可提交給資料來源的有效輸入項目。
這個屬性僅適用編輯表單控制項。
表單控制項的 Valid 屬性會彙總表單中所有**卡片** 控制項的 Valid 屬性。 只有在該表單的所有卡片中的值都為有效時,表單的 Valid 屬性才會是 true;否則,表單的 Valid 屬性是 false。
若只要在表單中的資料有效但尚未提交時才啟用按鈕儲存變更,請將按鈕的 DisplayMode 屬性設定為下列公式︰
SubmitButton.DisplayMode = If(IsBlank( Form.Error ) || Form.Valid, DisplayMode.Edit, DisplayMode.Disabled)
其他屬性
BorderColor – 控制項邊框的色彩。
BorderStyle – 決定控制項的邊框為實線、虛線、點線或無。
BorderThickness – 控制項邊框的粗細。
Fill – 控制項背景的色彩。
Height – 控制項的頂端和底部邊緣之間的距離。
Visible – 控制項顯示或隱藏。
Width – 控制項左邊緣與右邊緣之間的距離。
X – 控制項左邊緣與其父容器 (沒有父容器時則為螢幕) 左邊緣之間的距離。
Y – 控制項頂部邊緣與其父容器 (沒有父容器時則為螢幕) 頂部邊緣之間的距離。
其他資訊
- 如需表單運作方式的全方位總覽,請參閱 了解資料表單。
- 請參閱 EditForm 的 Power Fx 公式參考。
協助工具指南
螢幕助讀程式支援
- 請考慮使用**標籤**,新增標題到表單。