1.Your first approach is faster then the second one, because the open and close connection consume some execution time, but this solution is difficult to maintain.
2.The speed of SP execution and getting the data depends on the amount of data from the database tables.
3. A different solution is to use for each control a separate stored procedure, and if the amount of data are big (higher then 100 records) to use pagination only in those cases. I have an article about using pagination in the context of a ASP.NET application, where I provide a SP code (that implements pagination at the database level) could be used by you as starting point for your SPs.
Advanced ASPX GridView Pagination and Data Entities[
^]