Ok,
been testing relatively small data sets into my GridView, and all has worked fine. However, i\'ve now moved into proper UAT and have tried to load 17,000 records
You need to institute database paging.
This will involve creating custom sorting, custom filtering, and custom paging, but it will dramatically increase the performance of your code, as you'll be retrieving only a pages-worth of data at a time from the DB, instead of all 17,000 rows at a time.
I implemented this in a banking application that was designed to show, sort, and filter hundreds of thousands of loans. The answer is too complicated to give a simple example for, but start by researching database paging. Use LINQ, it'll give you simple Take and Skip methods to implement the paging easiest.