代码改变世界

关于Dictionary<k,v>绑定DataGridView的问题以及曲线解决办法

2011-11-28 21:26  于为源  阅读(2553)  评论(0编辑  收藏  举报

通过查阅资料发现:

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集合绑定DataGridView数据源,没有成功。而使用BindingDataSource又因为集合中的对象是不同子类型而失败。经过考虑我们可以使用如下的方法来解决。
      //定义集合分别存放数据
      Dictionary<string, Vehicle> vehicle=new Dictionary<string,Vehicle> ();//没被出租的车集合
     //……省略添加元素代码……

      //将集合中的对象保存到数组,然后将数组作为数据源
      Vehicle[] vehiclesArray = new Vehicle[vehicle.Count];
     vehicle.Values.CopyTo(vehiclesArray,0);
     dgvRent.DataSource = vehiclesArray;