【问题标题】:How to bind a GridView to a list of multiple types?如何将 GridView 绑定到多种类型的列表?
【发布时间】:2008-12-02 05:53:51
【问题描述】:

我收到此错误:

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

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

【问题讨论】:

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


    【解决方案1】:

    陈陈, 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”关系,但继承 从接口创建“可以做”关系。换句话说,IMO,实现 IEvent 这将是一个糟糕的设计,因为生日是一个事件。我会从这里的基类继承。

    希望这会有所帮助, 阀门。

    【讨论】:

      【解决方案2】:

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

      更多详情见本文:Polymorphic Databinding Solutions

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • 这可以做到,有几种解决方法:使用继承而不是接口,使用提供者,使用自定义BoundFields (iridescence.no/post/…)...
        猜你喜欢
        • 2014-07-29
        • 1970-01-01
        • 2017-09-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-24
        • 2017-10-16
        相关资源
        最近更新 更多