如何将GridView绑定到多个类型的列表?

时间:2008-12-02 05:53:51

标签: asp.net gridview domain-driven-design

我收到此错误:

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

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

3 个答案:

答案 0 :(得分: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;
             }
         }

请注意,从基类继承会创建'是'关系,但继承 来自接口创建'可以做'关系。换句话说,IMO,实施IEvent 这将是一个糟糕的设计,因为生日'是一个'事件。我会从这里继承基类。

希望这有帮助, 阀。

答案 1 :(得分:1)

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

本文中的更多详细信息:Polymorphic Databinding Solutions

答案 2 :(得分:-1)

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