It seems that you have the recordset setup correctly for this but when I view select lists and the populate list from array behaviors I see an issue. It looks like you are defaulting the child select list to get it's values from the child recordset. You should only be setting the parent select list to get it's values from the recordset, the other two lists should be populated from the populate list from array behaviors that you have.
You should apply the first populate list from array behavior on the parent list, this will populate the child list with the values you specify. Then for the grandchild list you will apply the populate list from array to the child list. So long as the id values match as a foreign key you should get the grandchild list to populate with the correct values based on the selection in the child list.
I also noticed that you had a populate list from array behavior applied to a td on the page, if you want the lists to be populated based on the selection of the previous list you should only be applying this behavior to the parent and child select lists.