我收到此错误:如何将GridView绑定到多个类型的列表?
System.Reflection.TargetException:Object与目标类型不匹配。
试图绑定List<IEvent>
,其中IEvent可以是约会,生日或其他几个与日历相关的事件类型。
我收到此错误:如何将GridView绑定到多个类型的列表?
System.Reflection.TargetException:Object与目标类型不匹配。
试图绑定List<IEvent>
,其中IEvent可以是约会,生日或其他几个与日历相关的事件类型。
这是无法完成的,如果您需要此功能,请不要使用gridview,这是我可以解决它的唯一方法。
ChanChan, GridView控件不不支持绑定到的接口的集合, 尝试redisigning您的应用程序,以确保绑定只concreate类的集合。 唯一的解决方法是使用基类(在你的情况下事件)并绑定到事件集合。
public class Event
{
public DateTime StartDate { get; set; }
}
public class Birthday : Event
{
public DateTime? EndDate { get; set; }
}
public class Appointment : Event
{
public string Place { get; set; }
}
public class EventCollection : Collection<Event>
{
public static EventCollection GetEvents()
{
var events = new EventCollection();
events.Add(new Birthday
{
EndDate = DateTime.Now.AddDays(1),
StartDate = DateTime.Now
});
events.Add(new Appointment
{
Place = "Gallery",
StartDate = DateTime.Now
});
return events;
}
}
请注意,从基类:继承创造“是”的关系,但是从接口继承 创建“能做”的关系。换句话说,IMO,实施IEvent 将是一个糟糕的设计,因为生日'是'事件。我会在这里继承基类。
希望这会有所帮助, Valve。
这样做有点痛苦,但可以将多种类型的列表绑定到GridView - 您只需为您的基本类型实现TypeDescriptionProvider
即可。
这篇文章中的更多细节:Polymorphic Databinding Solutions
这是可以做到,有几种解决方法:使用继承,而不是接口,使用供应商,使用自定义绑定列(http://iridescence.no/post/FixingBoundFieldSupportforCompositeObjects.aspx )... – 2010-01-06 16:00:00