通过查阅资料发现:
DataGridView的数据源必须是实现以下接口的任意类型:
(1)IList 接口,包括一维数组。
(2)IListSource 接口,例如,DataTable和DataSet类。
(3)IBindingList 接口,例如,BindingList<T>类。
(4)IBindingListView 接口,例如,BindingSource类。
MSDN解释
而Dictionary的类型定义为:
[SerializableAttribute]
[ComVisibleAttribute(false)]
public class Dictionary<TKey,TValue> : IDictionary<TKey,TValue>, ICollection<KeyValuePair<TKey,TValue>>,
IEnumerable<KeyValuePair<TKey,TValue>>, IDictionary, ICollection, IEnumerable,
ISerializable, IDeserializationCallback
并未实现以上接口
MSDN解释
而Dictionary的类型定义为:
[SerializableAttribute]
[ComVisibleAttribute(false)]
public class Dictionary<TKey,TValue> : IDictionary<TKey,TValue>, ICollection<KeyValuePair<TKey,TValue>>,
IEnumerable<KeyValuePair<TKey,TValue>>, IDictionary, ICollection, IEnumerable,
ISerializable, IDeserializationCallback
并未实现以上接口
MSDN解释
而今天课程的练习中有的同学,希望使用父类的Dictionary集合绑定DataGridView数据源,没有成功。而使用BindingDataSource又因为集合中的对象是不同子类型而失败。经过考虑我们可以使用如下的方法来解决。
//定义集合分别存放数据 Dictionary<string, Vehicle> vehicle=new Dictionary<string,Vehicle> ();//没被出租的车集合 //……省略添加元素代码…… //将集合中的对象保存到数组,然后将数组作为数据源 Vehicle[] vehiclesArray = new Vehicle[vehicle.Count]; vehicle.Values.CopyTo(vehiclesArray,0); dgvRent.DataSource = vehiclesArray;