Prenons par exemple une interface décrivant un profil .. Nous afficherons donc dans la vue une grille avec le nom et le prénom.

public interface IMonInterface
{
    string Nom { get; set; }
    string Prenom { get; set; }
}

Nous allons implémenter cette interface dans deux classes différentes ... A et B ... Nous aurions pu dire "Homme" / "Femme" ... Ce n'est pas important !

public class A : IMonInterface
{
    public string Nom { get; set; }
    public string Prenom { get; set; }
    public int Age { get; set; }
}
 
public class B : IMonInterface
{
    public string Nom { get; set; }
    public string Prenom { get; set; }
    public bool Sexe { get; set; }
}

Afin de rendre les données dans la grille ASP.NET 2.0, nous remplissons la liste et nous fournissons cette liste a notre grille.

protected void Page_Load(object sender, EventArgs e)
{
    List<IMonInterface> macollection = new List<IMonInterface>()
    {
        new B(){ Nom="Alfred", Prenom="Jean", Sexe= true},                
        new B(){ Nom="Alfredo", Prenom="Jeanot", Sexe= false},
        new A(){ Nom="Jean", Prenom="Conrad", Age=18}
    };
    gv.DataSource = macollection;
    gv.DataBind();
}

Que ce soit en AutoGenerateColumns ou en BoundField (ci-dessous), nous aurons une exception de type : "L'accesseur de propriété 'Nom' sur l'objet 'WebApplicationAjax4.A' a levé l'exception suivante :'L'objet ne correspond pas au type cible.'".... Il faut donc comprendre que le type joue un rôle important dans la reflection pour le remplissage d'une GridView ...

<asp:BoundField DataField="Nom" />

Mais comment faire pour que cela fonctionne ? Simple ... Il faut réflechir au comportement du BoundField et au comportement du ItemTemplate ... On se rend vite compte que si on implémente le code ci-dessous .... l'utilisation du "Eval" nous permettra de rendre via un autre mécanisme l'information ... Le type n'étant plus pris en compte de la même façon, le rendu fonctionne parfaitement ... Voici donc une solution au problème ! Vous en avez une autre ? Un petit commentaire est le bienvenu ... !

<asp:GridView ID="gv" runat="server" AutoGenerateColumns="False">
    <Columns>
        <asp:TemplateField>
            <ItemTemplate>
                <asp:Label runat="server" ID="nomID" Text='<%# Eval("Nom")%>' />
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField>
            <ItemTemplate>
                <asp:Label runat="server" ID="prenomID" Text='<%# Eval("Prenom")%>' />
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>