2

我收到此错误:

System.Reflection.TargetException:对象与目标类型不匹配。

当尝试绑定List<IEvent>IEvent 可以是约会、生日或其他一些与日历相关的事件类型时。

4

3 回答 3

2

ChanChan,GridView 不支持绑定到接口集合,尝试重新设计您的应用程序以确保仅绑定到 concreate 类的集合。唯一的解决方法是使用基类(在您的情况下为 Event)并绑定到事件集合。

        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;
             }
         }

请注意,从基类继承会创建“is a”关系,但从接口继承会创建“can do”关系。换句话说,IMO 实施 IEvent 将是一个糟糕的设计,因为生日是一个事件。我会从这里的基类继承。

希望这会有所帮助,Valve。

于 2008-12-02T08:15:24.827 回答
1

这样做有点痛苦,但是可以将多个类型的列表绑定到 GridView - 您只需TypeDescriptionProvider为您的基本类型实现 a 。

本文中的更多详细信息:多态数据绑定解决方案

于 2009-08-13T15:36:44.567 回答
-1

这是无法做到的,如果您需要此功能,请不要使用 gridview,这是我可以绕过它的唯一方法。

于 2009-01-08T14:56:24.297 回答