cancel
Showing results for 
Search instead for 
Did you mean: 
Reply
SL550
New Member

Using variable to show/hide form fields depending on ComboBox selected value, certain ComboBox values not working

Hi everyone.

 

I have a form used to score applicants for an internship.

 

There are 2 levels of review - Resume (Level 2) and Written (Level 3).

 

When the ComboBox.Selected.Value is "Assigned Level 2," only Level 2 form fields are visible. When it's "Assigned Level 3," only Level 3 fields are visible.

 

To make this happen, I've set a variable in the Visible property of the Level 2 form fields (varShowResumeReview).

 

Level 3 form fields have their Visible property set by a different variable (varShowWrittenSection)

 

It works fine until I include additional values from the ComboBox ("Level 2 In Progress," "Level 2 Complete, "Level 3 In Progress," "Level 3 Complete")

 

What happens then is that unless the selected value is "Assigned Level 2," or "Assigned Level 3," all the form fields are Visible. 

 

So, if I select "Level 2 In Progress," instead of showing only Level 2 form fields, the form displays both Level 2 and Level 3 fields.

 

I can't figure out what I'm missing in my formula:

 

Switch(

    ComboBox1.Selected.Value, 

   "Assigned Level 2",

   "Level 2 In Progress",

   "Level 2 Complete" ,     

        Set(varShowResumeReview, true);    

        Set(varShowWrittenSection, false), 

   "Assigned Level 3",

   "Level 3 In Progress",

   "Level 3 Complete",   

        Set(varShowResumeReview, false); 

        Set(varShowWrittenSection, true),  

 Set(varShowResumeReview, true); 

 Set(varShowWrittenSection, true))

 

 

Any help or ideas are greatly appreciated.

 

9 REPLIES 9
RandyHayes
Super User
Super User

@SL550 

What is the Items property of your Combobox?

_____________________________________________________________________________________
Digging it? - Click on the Thumbs Up below. Solved your problem? - Click on Accept as Solution below. Others seeking the same answers will be happy you did.
NOTE: My normal response times will be Mon to Fri from 1 PM to 10 PM UTC (and lots of other times too!)
Check out my PowerApps Videos too! And, follow me on Twitter @RandyHayes

Really want to show your appreciation? Buy Me A Cup Of Coffee!

The ComboBox Items property is:

 

Choices([@MySPListDataSource].ApplicantReviewStatus)

 

 

RandyHayes
Super User
Super User

@SL550 

Okay...a little bit of "principle" here first.  You are using a Choices column to allow flexibility in your app (presumably) for the choices available in your dropdown.  However, the choices require logic, which is not represented in your data.  So, you are kind of breaking the data/interface rules of app architecture.  Meaning that, if you do change your Choices column, then you are still forced to then change your app in order to account for the change.  Thus, what value does a Choice column provide?

 

That all said.  If you too see no need then for the Choices column in this case because it requires app logic changes, then consider a static list of Choices for your dropdown.  Now, I am going in a different direction than you currently have, and if this has negative implications, then we can go down the other road, but I wanted to take a more simplistic approach first.

 

That is to provide your logic in the data of the dropdown.

Meaning, Change your Items property to the following:

Table(
    {Value: "Assigned Level 2", Show: []},
    {Value: "Level 2 In Progress", Show: []},
    {Value: "Level 2 Complete" , Show: ["Review"]},
    {Value: "Assigned Level 3", Show: ["Written"]},
    {Value: "Level 3 In Progress", Show: []},
    {Value: "Level 3 Complete",   Show:["Review", "Written"]}
)

 

Then, your Visible properties would be the following:

For the Review Section:

    "Review" in Ungroup(yourCombobox.SelectedItems.Show, "Show")

For the Written Section:

    "Written" in Ungroup(yourCombobox.SelectedItems.Show, "Show")

 

This would provide the visibility of the sections you are looking for. (note, I added some "Shows" for an example)

 

In other words, for each of the choice values in the formula, just put in the Show column the things you want visible for those choices.  With the Visible formula above, they will be properly displayed based on the choice.

 

NOTE: If you are NOT allowing multiple selections, then the above Visible formula can be altered to:

    "Review" in yourCombobox.Selected.Show

    etc.

 

Keep in mind with the above changes, the column can still be a Choice column in terms of storing the value, or it can be a text column in terms of storing.  The only difference in the above is how your dropdown itself gets its choices.

_____________________________________________________________________________________
Digging it? - Click on the Thumbs Up below. Solved your problem? - Click on Accept as Solution below. Others seeking the same answers will be happy you did.
NOTE: My normal response times will be Mon to Fri from 1 PM to 10 PM UTC (and lots of other times too!)
Check out my PowerApps Videos too! And, follow me on Twitter @RandyHayes

Really want to show your appreciation? Buy Me A Cup Of Coffee!
NandiniBhagya20
Solution Sage
Solution Sage

I would suggest using if condition instead of switch : 

If(ComboBox1.Selected.Value ="Assigned Level 2" || ComboBox1.Selected.Value = "Level 2 In Progress" || ComboBox1.Selected.Value ="Level 2 Complete" , Set(varShowResumeReview, true); Set(varShowWrittenSection, false), If(ComboBox1.Selected.Value = "Assigned Level 3" || ComboBox1.Selected.Value = "Level 3 In Progress" || ComboBox1.Selected.Value ="Level 3 Complete", Set(varShowResumeReview, false); Set(varShowWrittenSection, true),  Set(varShowResumeReview, false); Set(varShowWrittenSection, false))
You can also use below formula directly on the visible property of the field which you want to hide: 
For resume related fields:
If(ComboBox1.Selected.Value ="Assigned Level 2" || ComboBox1.Selected.Value = "Level 2 In Progress" || ComboBox1.Selected.Value ="Level 2 Complete" , true, false)


Did you like my post? Please give it a thumbs up! Did I resolve your issue? Please click Accept as Solution to close the topic and so other members of the community can find solutions more easily.

Hi RandyHayes,

 

Thank you so much for the time and effort to offer me a solution and in-depth explanation. 

As I'm looking over it and trying to understand it, I have a question. Could I set the statement to a variable like this?:

 

Set(varShowResumeReview,  "Review" in Ungroup(yourCombobox.SelectedItems.Show, "Show"))

 

If I can, I'd like to avoid having to go into each field's Visible property to apply the statement because there's a large number of them. (100+)

 

 

 

 

Hi NandiniBhagya20,

 

Thank you for the thoughtful reply. I greatly appreciate it.

 

But I tried using If with Or and with ||, but then both Level 2 and Level 3 fields were Visible regardless of which selection I made in Combobox1.

¯\_(ツ)_/¯

RandyHayes
Super User
Super User

@SL550 

You can, but you still have the same challenge of changing all the controls to that variable.  In general, using variables is not what you want to do in PowerApps.  The less you use the better your app is to build, manage and maintain.

Do you really have 100+ fields in your form?  That might be a bit difficult to manage as well.  But still, the formula provided should only need to be applied at the datacard level Visible property.

_____________________________________________________________________________________
Digging it? - Click on the Thumbs Up below. Solved your problem? - Click on Accept as Solution below. Others seeking the same answers will be happy you did.
NOTE: My normal response times will be Mon to Fri from 1 PM to 10 PM UTC (and lots of other times too!)
Check out my PowerApps Videos too! And, follow me on Twitter @RandyHayes

Really want to show your appreciation? Buy Me A Cup Of Coffee!

That's the good thing...the variable I used in the example I gave is the actual variable I'm using on the Visible property. So it's already there, I wouldn't have to go setting each and every control's Visible property again.

 

At least that's my hope. I'll try implementing the solution and report back.

 

One thing. I didn't think of this earlier, and apologies if it's caused any confusion, but when I say "controls," I think maybe I should be saying "datacards" because the variables ( varShowResumeReview and varShowWrittenSection) are applied in the datacards' Visible property. 

 

I fear I've been wrongly using the terms interchangeably.

 

And yes! It is a pain to manage a form with that many controls. Definitely something to consider in the next project.

RandyHayes
Super User
Super User

@SL550 

Well, the reason I push more away from using variables is that they are very "program" like and quite a pain to manage in PowerApps.  PowerApps is not a programming platform, so, although it has variables, they should be used only when necessary.

In this case (and much is all the cases in PowerApps), the goal is to have your controls derive their values based on data in the app itself.  So, the Dropdown/Combobox, in this case, is providing the data to control the screen itself.  No variables needed and easier to maintain as all your "logic" and control is in one formula only.  

This also leads to the point that setting variables is something that is only done in a Behavioral action formula.  This means you need to have some behavioral action to set it.  That is just more work for you to do.

 

As for the DataCards...that is all good.  There is actually a trick to selecting them, but it is more of a hit-miss pain than just going into the datacard and setting the Visible property.  But, once done, they don't need to change.

_____________________________________________________________________________________
Digging it? - Click on the Thumbs Up below. Solved your problem? - Click on Accept as Solution below. Others seeking the same answers will be happy you did.
NOTE: My normal response times will be Mon to Fri from 1 PM to 10 PM UTC (and lots of other times too!)
Check out my PowerApps Videos too! And, follow me on Twitter @RandyHayes

Really want to show your appreciation? Buy Me A Cup Of Coffee!

Helpful resources

Announcements
Power Apps News & Annoucements carousel

Power Apps News & Announcements

Keep up to date with current events and community announcements in the Power Apps community.

Community Call Conversations

Introducing the Community Calls Conversations

A great place where you can stay up to date with community calls and interact with the speakers.

Power Apps Community Blog Carousel

Power Apps Community Blog

Check out the latest Community Blog from the community!

Top Solution Authors
Top Kudoed Authors
Users online (4,053)