asp.Net GridView lier objet personnalisé avec Liste imbriquée

J'ai une Liste d'objet personnalisé, qui consistent en une liste personnalisée.

class person{
  string name;
  int age;
  List<friend> allMyFriends;
}

class friend{
  string name;
  string address;
}

Je'trying de lier une liste de ces objets à un GridView et la Grille doit créer pour chaque ami d'une colonne et d'écrire le nom. Si certaines personnes ont la même frined la grille ne doit pas créer une autre colonne, mais l'utilisation de l'existant. Vous savez ce que je veux dire.
(Les classes sont juste quelques exemples de classes pour simplifier mon cas)

Est-il un moyen de personnaliser dynamiquement la liaison?

Je peux changer les définitions de classe et ainsi de suite, s'ils ont besoin d'hériter de plusieurs interfaces et ainsi de suite.

J'ai googlé beaucoup, mais aucun exemple ne semblait vraiment pour couvrir ce cas.

Pouvait l'utilisation d'un objectSourceControl résoudre mon problème d'une certaine façon?

Mise à jour:

Pour donner plus d'informations:
À la fin j'ai une liste de personnes, tandis que chaque personne de la liste dispose d'une liste d'amis.

List<person> allPerson = new List<person>();
//fill the list
Grid.DataSource = allPerson;
Grid.DataBind()

La table doit avoir des colonnes pour chaque ami et les lignes sont la personne. Lorsqu'une personne a un ami une croix (ou autre) doit être placé dans la grille.

friend1 friend2
   x              peter
   x       x      adam

Au moment de l'interception de la RowDataBound et depuis la liaison crée uniquement les lignes avec les noms et pas les colonnes, parce que la seule propriété sur ma personne objet est le nom. Est-il un moyen de forcer la liaison de regarder à travers la Liste des Biens dans les objets de la personne et de créer une colonne pour chacun d'eux.

OriginalL'auteur derSteve | 2008-11-17