I created a shopping cart for a website that can display multiple types of items that implement IShoppingCartItem. When the GridView would display items that were different type, I would get this exception:

Exception Details: System.Reflection.TargetException: Object does not match target type.

I found a lot of solutions that I didn't really like. For example, every shopping cart item type could implement ITypedList.

What I ended up doing was creating a CartGridItem class that implements IShoppingCartItem:

public class CartGridItem : IShoppingCartItem
    private readonly IShoppingCartItem _baseCartItem;
    public CartGridItem(IShoppingCartItem baseCartItem)
        _baseCartItem = baseCartItem;
    #region IShoppingCartItem Members
    public string ProductCode
        get { return _baseCartItem.ProductCode; }
//...end of code sample...

This has worked great, and I don't have to make any changes when I create a new item that implements that interface!