Nested Repeaters – Very useful for parent-child relations.
It’s useful to give a name to the first table in the DataSet:
adapter.Fill(ds,“FirstTableName”);
From the MSDN article on Populating a DataSet
If the DataAdapter encounters multiple result sets, it creates multiple tables in the DataSet. The tables are given an incremental default name of TableN, starting with “Table” for Table0. If a table name is passed as an argument to the Fill method, the tables are given an incremental default name of TableNameN, starting with “TableName” for TableName0.The only thing left is to set the relations between the DataTables in the DataSet.