代码之家  ›  专栏  ›  技术社区  ›  DevelopingChris

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

  •  2
  • DevelopingChris  · 技术社区  · 17 年前

    我得到这个错误:

    系统。反思。TargetException:对象与目标类型不匹配。

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

    3 回复  |  直到 17 年前
        1
  •  2
  •   Valentin V    17 年前

    陈, 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”关系。换句话说,国际海事组织正在实施IEvent 这将是一个糟糕的设计,因为生日是一个“事件”。我会继承这里的基类。

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

        2
  •  1
  •   Brandon Wood    16 年前

    必须这样做有点痛苦,但可以将多个类型的列表绑定到GridView——你只需要实现一个 TypeDescriptionProvider 对于您的基本类型。

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

        3
  •  -1
  •   DevelopingChris    17 年前

    这是不可能的,如果你需要这个功能,不要使用网格视图,这是我唯一能绕过它的方法。