Adding a Visible Blank Option to Power Apps Dropdowns
Go beyond AllowEmptySelection. Inject a genuine empty row into your dropdown items list for a clearer user experience.
The AllowEmptySelection property in Power Apps gives the ability to deselect an item by clicking it again. From a UX perspective, that gesture is completely hidden — most users never think to tap the already-selected value to clear their choice. The cleanest way to offer an empty starting state is to inject a visible blank record directly into the dropdown's data source using Table and Ungroup.
Scenario: Timesheet Entry App
I ran into this problem while building a phone-friendly timesheet entry app for a construction crew. Foremen needed to log daily activities: Site Prep, Concrete Work, Framing, Roofing, and Finishing. The form included a dropdown for the activity and another for the job site. Without a visible blank option, the dropdown always defaulted to the first alphabetically sorted value, causing constant data-entry errors. The fix was to add a blank entry at the data level so the foreman could consciously choose an option rather than accidentally submitting a wrong one.
Setting Up the Data Sources
Instead of hardcoding options, store them in a SharePoint list so updates are easy without republishing the app.
Create a SharePoint list called LookupValues with two columns:
- Category (Single line of text)
- OptionValue (Single line of text)
Populate it like this:
| Category | OptionValue |
|---|---|
| Activity | Site Prep |
| Activity | Concrete Work |
| Activity | Framing |
| Activity | Roofing |
| Activity | Finishing |
| JobSite | 55 Main St |
| JobSite | 120 Oak Ave |
| JobSite | 400 Elm Dr |
Create a second list called TimeEntries that will hold the submitted rows:
| Column Name | Data Type |
|---|---|
| Title | Single line of text |
| Date | Date and Time |
| Activity | Single line of text |
| Hours | Number |
| JobSite | Single line of text |
Step-by-Step Implementation
Create the App and Form
Open Power Apps Studio and create a blank canvas app (phone layout). Connect both SharePoint lists. Insert an Edit form and bind it to the TimeEntries list. Set the form's DefaultMode to FormMode.New.
Replace Text Inputs with Dropdowns
For the Activity card, delete the default text input and insert a Dropdown control. Name it drp_Activity. You'll see a red error badge on the card — ignore it for now.
Inject the Blank Option
The logic lives in the Items property of the dropdown. This is the key pattern:
Ungroup(
Table(
{Options: Table({OptionValue: Blank()})},
{Options: Filter(LookupValues, Category = "Activity").OptionValue}
),
"Options"
)How it works:
Table({OptionValue: Blank()})creates a single-row table where the value is blank.Filter(LookupValues, Category = "Activity").OptionValuereturns a single-column table containing all the real activity options.- The outer
Table(...)wraps these two pieces into a table with a column namedOptions. Ungroup(..., "Options")flattens everything back into a single-column table for the dropdown. The blank entry ends up at index zero, making it the default.
The column name inside the inner Table(...) — in this case OptionValue — must exactly match the column name returned by your Filter(...) call. If the names don't match, Ungroup will collapse the schema and the dropdown will show nothing or break.
Wire Up the Card Properties
Now fix the red error badge by pointing the card's Update property to the dropdown:
drp_Activity.Selected.OptionValue
Set the card's standard properties to inherit the form's behavior:
Default: Parent.Default DisplayMode: Parent.DisplayMode
Repeat for Job Site
Follow the same process for the JobSite card. Delete the text input, add a dropdown named drp_JobSite, and use this Items formula:
Ungroup(
Table(
{Options: Table({OptionValue: Blank()})},
{Options: Filter(LookupValues, Category = "JobSite").OptionValue}
),
"Options"
)Update property:
drp_JobSite.Selected.OptionValue
Add the Submit Button
Insert a button below the form with the text "Log Entry". Set its OnSelect property:
SubmitForm(frm_TimeEntry)
To allow logging multiple entries without navigating away, add a reset in the form's OnSuccess:
ResetForm(frm_TimeEntry)
Troubleshooting Common Mistakes
| Mistake | Solution |
|---|---|
| Dropdown shows no items or a "schema mismatch" error | Ensure the column name inside the inner Table({OptionValue: Blank()}) matches the column name from the Filter result exactly. |
| Red error badge persists on the card | The card's Update property is still pointing to the deleted text input. Change it to drp_Activity.Selected.OptionValue. |
| The blank option displays the word "Blank" instead of nothing | Your column might be a Choice type. Use Single line of text for OptionValue. Alternatively, pass a zero-length string "" instead of Blank(). |
| Users can submit with the blank value selected | Add validation on the form's OnOk event or configure required fields in the data source. |
AllowEmptySelection works technically, but its behavior is invisible. Users have no clue they can tap the current value to clear it. Adding a real blank row makes the possibility obvious and eliminates training overhead.
Delegation and Performance
The Filter function used in this pattern is fully delegable with SharePoint connectors, meaning performance stays consistent even when your lookup list grows to tens of thousands of rows. The Table and Ungroup operations happen entirely on the client side and operate on the already-filtered, small result set.
Final Recommendation
Stop hiding the empty state. By building the blank option directly into the dropdown's items list you create a visible, discoverable, and foolproof interaction model. Store your options in SharePoint, apply the Ungroup / Table / Blank() pattern, and avoid the need to train users on obscure gestures like re-clicking a selected item.
References
- Original technique inspiration: How To Add A Blank Value To A Dropdown List In Power Apps by Matthew Devaney
- Microsoft Learn: Understand canvas-app controls in Power Apps (search for "Dropdown" for property specifics)
- Microsoft Learn: Ungroup function reference
- Power Fx formula reference:
Table,Blank,Filterfunctions
Learn how small coding practices—like using descriptive names, flattening conditions, and simplifying logic—can make your apps easier to update and less error-prone.
Move past the gallery and discover the hidden patterns for validation, navigation, and smart submission handling in your data entry forms.
PowerShell unlocks admin capabilities that the Power Platform admin center simply doesn’t offer—from recovering deleted apps to blocking trial licenses. Here’s how to wield them safely.