You don’t have to use TableAdapters to use some of the advantages of strongly-typed DataSets and declarative DataSources. In fact, leaving out table adapters can make your code more flexible, and frees you from some of the TableAdapter’s awkward behavior.
If you’re not familiar with typed datasets and table adapters, take a look at these tutorials. Here’s what I did to avoid using TableAdapters while still taking advantage of BLLs and declarative DataSources.
1. Created a blank dataset called CustomDataSet. Added a blank table to the dataset, and then added columns to that table.

Add DataTable to the DataSet
2. Created a Business Logic Layer (BLL), and put the results of my executed command into the table I created in step 1.
'I'm using the Oracle Data Provider, not the Microsoft one, but you can use whatever gets you connected to the db
Imports System.Data
Imports Oracle.DataAccess.Client
Imports Oracle.DataAccess.Types
Imports CustomDataSet 'Reference the custom dataset we just created
_
Public Class aBLL
_
Public Function getStuff() As CustomDataTable 'Reference the CustomDataTable we created
'Create a connection to the db
'Create a command (called cmd is my case)
'Create a data adapter, which we use to move data from my database to the table
Dim MyDA As New OracleDataAdapter
'Create an instance of the CustomDataSet
Dim ds As CustomDataSet = New CustomDataSet
'Put your command results into the table we created
MyDA.SelectCommand = cmd
MyDA.Fill(CustomDataTable)
Return ds.CustomDataTable
End Function
End Class
3. Then all you’ve got to do is create an Object DataSource in the .aspx page, and link that datasource to your datagrid.
I’ve also found this to be a lot more flexible than having to work with table adapters–which I think are too complicated and restrictive. This way, I get to create the code like I want it and still take advantage of some of the cool stuff .net offers.