我所做的一切都很简单:
// 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");
}
我的问题是:有没有办法在设置后更改DataGridView控件的数据源?我正在使用C#4.0和Visual Studio 2010进行开发。
答案 0 :(得分:4)
数据绑定不能与IEnumerable
s一起使用;你只能绑定到IList
或更好。
添加.ToArray()
以将IEnumerable
变为IList<T>
。
它第一次工作的原因可能是因为你的GetAllOrderItems
没有执行任何LINQ调用,最终返回一个实现IList
的对象。
但是,由于您的GetOrderedItemsWhereBrandIs
方法(可能)包含Where()
调用,因此它会返回仅实现IEnumerable
的对象。