views:

99

answers:

1

All I am doing is a simple:

    // Both the methods, order.GetAllOrderItems() and order.GetOrderedItemsWhereBrandIs("foo")
    // return an IEnumerable<T> so the assignment to the DataSource property of the DataGridView
    // should be fine. The problem is in re-assigning the data source property.
    public void DisplayItems()
    {
        // The data appears if I have just this line.
        dgvOrderedItems.DataSource = order.GetAllOrderItems();

        dgvOrderedItems.DataSource = null;

        // This time the data grid does not take the new data source. Instead, because
        // of the null assignment in the previous statement, it displays no data at all.
        dgvOrderedItems.DataSource = order.GetOrderedItemsWhereBrandIs("Lenovo");
    }

My question is: is there a way to change the data source of a DataGridView control once it has been set? I am using C# 4.0 and Visual Studio 2010 for development.

+2  A: 

Databinding cannot be used with IEnumerables; you can only bind to an IList or better.

Add .ToArray() to turn the IEnumerable into an IList<T>.

The reason it works the first time is probably because your GetAllOrderItems doesn't perform any LINQ calls and ends up returning an object that implements IList.

However, since your GetOrderedItemsWhereBrandIs method (presumably) includes a Where() call, it returns an object that only implements IEnumerable.

SLaks
SLakS, you're a hero! You're the man!
Water Cooler v2