Hi, all-- forgive a beginner's question, but I am trying to build a quick peer-review gradebook for one of our teachers. We want to have a form which lists the class roster, and gives a dropdown 1-5 scoring list for each student. I want to write this back to an Excel sheet that will store the student's name and score. I've tried two things so far:
1) I made a gallery which pulled the roster, and lets us select a student and enter a score. This is great except that I have to hit submit each time, rather than being able to add all of the scores at once and hit submit.
2) I tried to create a custom form where each data card had two controls: the number box and a label containing the students name. I can get the score to pass to the form, but I can't get the student's name to write back.
Any suggestions on how to approach this would be much appreciated! Thanks--
Thanks for your help! I'm following your suggestions, and I created a gallery with a dropdown menu. Question: will this create new entries for each score, or will this replace/update the score each time? I'm concerned that it seems like there will only be one master column in my Excel table for "Score," and that value will get replaced with each update. Perhaps I'm not familiar enough with Patch.
On another note, I added the drop down menu to the Gallery control, and I set the Items field to = ThisItem.Score (name of column in data source). I have an error that "The property expects table values, but this rule produces incompatible Text values."
Thanks again for your help!
Take a step back, we need to get your data structure right first.
Looking at your post im assuming you want to grade multiple subjects/exams.
1st step, your going to need three lists.
list 1: Students. for starters just create 1 column with their name, you can add other bits later.
list 2: subjects. again, for starters 1 column with the subject name in.
list 3: Grades. 4 columns in this 1, Subject,Grade,student,date. Set all the column types as numbers except the date, which will be of type date (we will be populating this with the ID from each of the students and subjects lists, and assuming the grade is also a number (if its not then use whatever field type is necessary, keep away from lookup, we can set the choices within powerapps)
get started with that and ill post further.
Within power apps we are going to need the following screens:
Screen 1: screen to choose what to do - this can have buttons on it with the onselect property set to navigate to each of the next
screen 2: screen to input results for each student for a given subject.
screen 3: screen to view results for a specific student
You can add screens later in order to add new subjects and students and view results by subject.(by then you should have a fairly decent understanding.
Screen 1
Each button should have its on select property set to:
Navigate(ScreenName,ScreenTransition:none)
Screen 2 - im going to set this up for a single subject, you can change this later if required by moving the dropdown to the gallery and changing your formulas slightly, but at the moment i assume you only want to input for 1 subject but multiple students.
Add a dropdown at the top of the screen and set its items property to Subjects on the advanced tab.(the name for your subjects list)
Set its value property to SubjectName (the column name in your list)
Add a date picker also to the top of the screen.
Add a gallery. Set its items property on the advanced tab to Students (the name of your list which contains the students)
Now go to the properties tab and click data, you can now choose ust a simple 1 line gallery and set this to student name.
This should now populate with your students names.
Select the first gallery item so that the section box comes up around it, add a new control, dropdown. You should see this dropdown get populated in each gallery item (for each student).
Select the dropdown in the first gallery item and on the advanced tab set its items property to [1,2,3,4,5,6,7,8,9,10] (this assumes your grades are 1-10)
Now set the on change property of the drop down to the following:
If(IsEmpty(Filter(Grades,Date=DatePickerName.Selected.Value And Subject = LookUp(Subject,SubjectName=SubjectDropdownName.Selected.Value,ID And Student = Thisitem.ID))),Patch(Grades,Defaults(Grades),{Student:Thisitem.ID,Grade:GradeDropdown.Selected.Value,Subject:LookUp(Subjects,SubjectName=SubjectDropdown.Selected.Value,ID)}),Patch(Grades,{ID:LookUp(Grades,Student=Thisitem.ID And Date=Datepickername.Selected.Value And Subject=LookUp(Subjects,SubjectName=SubjectDropdown.Selected.Value,ID),ID),{Grade:GradeDropdown.Selected.Value}))
Its not very clean but it will show you how im referencing things, there are better ways to achieve it but this wil help you understand a few functions. So above we first ask a question wi the If function, that question is: For my selected date, subject and student does a record already exist in the grades table (IsEmpty) .
We then give it something to do for true, so my record doesnt exist so im going to add it (patch). The defaults part of the patch function will automatically give the record an ID number.
then we give the function a false value. So my record does exist, so im going to update it. We lookup the ID number for the row using the values we have, and then ammend the grade to the new value. (remember, if we put in a wrong grade and we change it we dont want to create a new record, just ammend the one already created.
Doing it this way saves having multiple screens and allows you to enter all the grades without having to confirm or submit anything.
Screen 3
Add a dropdown and set its items property to Students (listname of your students), change the value property to StudentName
Add a gallery and Set its item property to
Filter(Grades,Student=Lookup(Students,StudentName=Dropdownname.Selected.Value,ID))
Select the first gallery item and insert a label.
Set the label text property to:
Lookup(Subjects,ID=ThisItem.Subject,SubjectName)
Add another label and set its text property to Thisitem.Grade
Probably a few mistakes in their as i havnt tested and had a few beers 🙂 youll have to ensure any names are correct such as dropdown/datepicker names and column/list names but it should give you the foundation of your app to move forward.
Once you get used to the syntax and functions it gets easy. You could also add in a column for the user that submitted the grade, you can reference the logged in user using User().FullName.
Hope this helps.
Apologies, ive just posted (waiting approval) but just realised you are using excel as your source, not sharepoint. I havent had any experience with excel but you should just be able to modify parts of what i have posted to do what you want. Based on wat you are tring to achieve though, i believe using database would be a better option going forward and a sharepoint site (private to your organisation) would be a better option for scalability if this is going to be used on a regular basis and throught school years etc.