Alright,
I've finally found the solution. Searching the internet reveals this is not an uncommon problem. The solution however, is never too far away.
First I changed everything on my page (including page directive, gridview, updatetemplate and dropdownlist) to EnableViewState="true", Then I set the AutoPostBack="true" on my dropdownlist, Finally, I need to make sure that I'm not binding the gridview with it's data in the page_load method because this phase in the lifecycle already rebinds the dropdownlists and sets their selectedindex back to default before the onselectedindexchanged event can be fired.
I just let the gridview do the binding as usual by setting it's datasourceid. During my search, I've seen many people with a similar issue and I think this should fix a lot of them. Or at least it's worth a shot :)