I'm building a checklist app for a team that after they submit their answers to the checklist that they want to be able to go back and edit/update the same list. I've set this up within 2 screens, one is a "list view" that shows the SP List line items, and the actual checklist screen which is a form with embedded galleries for the checkboxes. (Each datacard has a nested gallery for the checkboxes).
The checklist screen is currently being used as a view/edit/new form.
The initial save (submit form) works great, and all the data is saved to the SPList. However, when I go back to the Browse Screen, select the record I want to pull up (all one sharepoint line item) it doesn't display the data from the checkbox columns. All other datacards are pulling the data properly.
The Browse list is a gallery with the:
OnSelect EditForm(ChecklistForm);Navigate('Checklist Screen')
Items is a search in the MRN field : Search(colRecords,txtSearch_1.Text,"MRN")
When I click the entry, it *does* pull up the record (colRecords is collecting MRN, Patient Name, Last Updated, Author, Editor, and ID)
The data from MRN, Patient Name, Created, etc, are pulling the data into the form from the SPList. The individual checkboxes (each color is its own gallery nested in a datacard) are not. I'm pretty sure that's why--but I don't know how to fix it so that the ViewForm or EditForm populates the data from the SPList.
Oh sorry...I meant:
Self.Text in ThisItem.yourChoiceColumnName.Value
I assume the Text property of your checkbox is derived from the choice column values.
That formula kind of worked--no errors this time, but it defaultly selected all the checkboxes regardless if they were filled out or not. I also tried ThisItem.IsSelected, which did the reverse.
IsSelected is not what you are thinking it is - it is a true false property that indicates if a particular row in a Gallery is selected. There is only ever ONE row selected. So this is not what you are looking for as you apparently need multiple items selected.
I am sorry I'm not so clear on where you are going with this, but the formula I suggested had a caveat...that was:
HOWEVER...you will Also need to deal with your collections again when you edit. The reason is, if you don't repopulate the collection, then when you submit that form again, it is going to update the column with the contents of the collection...and if you don't recollect it, it will be empty and your record will be blank for that column.
So, the question is this...when you go to edit a record, how are you repopulating the collection that you are using as the base of your galleries for the Update??
The formula I suggested doesn't really give you what you want only because it needs to reflect the value in the collection - because that is how you chose to get the selections and use them for the update.
Your Gallery is not relevant in the checking of the checkboxes - it all has to do with the comparison of the text of the dropdown to the underlying choice column values.
So, to be clear for the formula : Self.Text in ThisItem.yourChoiceColumnName.Value
Let's break it down...
What it is doing is comparing the Text of the Checkbox (again assuming that your text of the Checkbox is set to the actual values of your Choice column - most likely you have a ThisItem.Value in the Text property of the Checkbox). Then it is comparing that using the in operator to see if the Text/Value is in the current underlying record column table of values (assuming that your choice column allows multiple selections).
Now, I do see an oversight on my part...the use of ThisItem is going to reference the record of the Gallery. I really meant for that to reference the record of the form. So, we need to modify a couple things so that the value is passed to the Gallery, otherwise there is no direct path back to the form record.
BUT, before we make those changes - what is the Item property of your Form?? That could be helpful.
However, I'm still going down this road with you and we can certainly get to a point where you go "wow, it's working", BUT, there is going to be your next problem which is going to be "whenever you edit a record, it shows all the proper checkboxes checked, but once you submit, all the selections go away". And this is all going to be about my referenced statement above...that needs to be resolved!!
I had a bit of an "ah ha!" moment here--I was so focused on clearing the collections on the way out to the next screen, I forgot to grab the information on the gallery selection on the list screen. I'm working first on creating a collection to grab the information from the column on select of the gallery item. Once I can at least verify that it's pulling that data into the collection, the next thing is to try and get those darned checkboxes. Lemme work on the collection, then get back to the rest of your last post. I'll post an update once I validate my collection and go through the rest of your info.
In case I haven't said it enough yet--thank you so much for helping me through this! This simple "turn this word doc into an app" has turned into a bit of a beast!
Yes, the trick is that, if the collection is an integral part of the form update, then it needs to be populated properly all the time.
The reality is, you can do ALL of this without collections, but there is a trick to that also. Normally, one would just filter a gallery to get the checked boxes and then use that. It's VERY easy! However, there is a bug in PowerApps whereby, if you use a Gallery inside of the datacards of a form, the gallery will NOT filter properly.
The trick is to actually have the Gallery outside of the form. You can reference the gallery just fine from the form. Why that is a trick for some is that their form scrolls and the gallery would not - however there is an easy solution to that also.
SO...you kind of have two choices:
1) Stick with the collection and deal with maintaining that collection to populate and provide to form updates.
2) Put your Gallery outside of the form (but on top of it visually).
For #2, the solution then revolves around the form Item property. It needs to be a variable that can be used by the Gallery as well. Your Items property for the Gallery would be exactly the same. The checkbox in the Gallery would derive its state from the current record that the form is showing. The update on the form would use the Gallery's checkboxes as the update value to submit.
Let me know which way you want to go and I'd be happy to assist as you go. Personally, I would lean to #2 as it is much simpler, but that is your design choice as the designer.
@RandyHayes This is a great suggestion! I've been mulling over how to get that collection to work to repopulate it, and failing miserably (doing lots of lookups that don't seem to be working properly into the collection). I like your idea of adding the gallery outside of the form, but I'm concerned about the scrolling since I'm wanting to keep the entire form in one screen (they're going to have to scroll on the one screen, and I'm ok with that).
Maybe another way I do this is break it into multiple forms, with the galleries for the checkboxes in the middle and toss the form data into a variable? Otherwise the way I see it, if I create the gallery outside the form, it would be docked in the screen and not scroll with the rest of the form (unless you know a way to make it not do that).
I'm going to try both ways and see which I can get to work "better." This collection is a beast to get to pull the data from the line/column in Sharepoint, and your idea of doing the gallery outside of the form sounds like a great solution--much easier, too.
Ah yes...as I mentioned - solving the gallery position and scrolling it with the form is easy to solve!
What you need is a Canvas control. Unfortunately, there is no Insert option to add a canvas control.
Here is how you do it -
1) Create a new screen in your app and choose a Scrollable Screen to insert.
2) On that screen there will be a Canvas control (seen in the left control tree). Selected that Canvas
3) Now, the canvas will be selected on the screen and you can now resize it. Do so now (there is a reason) and make it smaller.
4) Ctrl-X it to cut it off the screen
5) You can delete the screen you just added at this point...we don't need it.
6) Return to your form screen and then paste (ctrl-v) it onto that screen.
Now you have a canvas! If you look at the canvas, you will see it has a datacard in it (most likely named Datacard1), this is where the magic happens...so next:
1) Resize the Canvas control to be essentially the size of the area you want your form to be and to scroll.
2) Select your form and cut it (ctrl-x)
3) Select the Datacard1 in the canvas and then paste (ctrl-v)
Your form is now in the Datacard.
For the Galleries...select those one at a time in the form and cut them out of the Form datacard, then select the Canvas datacard and paste them there. (you might want to make them small at this point just to get them out of your way - or set them to not be visible while you do the next steps)
Now, you're pretty much set. Next steps are this...resize the Canvas datacard to be longer than the canvas (it will pretty much resize itself as you move controls around it it. Resize your form so that IT does not scroll (make it bigger). Fix up the datacards in it so that you have the spacing you want to accommodate the Galleries in the places you want. Put the Galleries in their place and size them as needed (if you made them non-visible above, make them visible now).
What you have now is a fixed size Canvas control with a scrollable Datacard in it. In the datacard, you have a full size form (will not scroll) and, on top of your form visually, you have galleries.
So, when the datacard is scrolled, everything in it will scroll together.
Seems like a lot of steps, but once you do it a few times, it becomes second nature. Personally, I use canvas controls almost everywhere - with lots of datacards in them usually.
Anyway - your other idea on splitting the form is a bit overkill for this situation, AND if you split a form, you need need to split it properly so that you do NOT lose the functionality of the form. I have a concise video on doing just that and properly (lots of videos and blogs out there that do it completely wrong!)
But still...I think that is overkill and it would not solve the Gallery in a form issue.
Finally getting to this today--will update on this later. TLDR: I didn't even know this functionality existed! I'm digging the new knowledge!
Yes, some of the things that I provide are little know and not well covered...some day I will find more time to do more videos on these topics!
Ok! We are rockin' with this new screen setup, and the galleries are outside the Form and everything has been (mostly) adjusted. I'll have new galleries to setup similar to these, but I want fully understand what we need to do to get the data to pull up properly before I get to the next half of the form.
The Default property to the checkbox (highlighted above) is set to Self.Text in ThisItem.Value, which defaultly turns on the checkbox regardless if it's selected or not. I tried just ThisItem.Value and get a delegation warning.
I'm assuming I have to do shenanigans to the gallery (in this specific case, galSEPSIS) to have it call the specific data for the selected item that Form is pulling up (since it's outside the form now). Honestly totally lost what to do now.