【问题标题】:WPF MVVM ObservableCollection/DataGrid Multiple Sql TablesWPF MVVM ObservableCollection/DataGrid 多个 Sql 表
【发布时间】:2017-11-30 04:31:44
【问题描述】:

好的...当我继续通过自学来糊弄自己时...这是我的最新问题。哈!我有一个使用 MVVM 的 WPF 应用程序和三个不同的示例 MySQL 表,如下所示:

预订

Booking_ID_Num | Book_Type_Num | Fac_ID_Num |
---------------|---------------|------------|
       1       |       1       |     2      |
       2       |       2       |     3      |
       3       |       1       |     1      |

BOOKING_TYPES

Book_Type_Num |  Book_Type |
--------------|------------|
      1       |  Full Time |
      2       | Singe Case |

设施

Fac_ID_Num | Facility_Name |
-----------|---------------|
    1      |   Joe's Shop  |
    2      |    MedRX      |
    3      | Grocery Story |

我将尽可能简洁地解释这一点,请随意批评...我想填充一个 ObservableCollection 并将该 ObservableCollection 传递给 DataGrid。我知道如何通过模型类填充 ObservableCollection,但我不知道如何填充多个表。在此示例中,我希望将 ViewModel 中的 Observable 集合传递给结构如下的 DataGrid:

Booking_ID_Num | Book_Type_Num |  Book_Type  | Fac_ID_Num | Facility_Name |
---------------|---------------|-------------|------------|---------------|
       1       |       1       |  Full Time  |      2     |     MedRx     |
       2       |       2       | Single Case |      3     | Grocery Store |
       3       |       1       |  Full Time  |      1     |   Joe's Shop  |

基本上,我想在最终解决方案中使用 Book_Type 和 Facility_Name,而不必在 MySQL 数据库中进行任何调整,例如创建新的“视图”或其他东西。那有意义吗?这个网站在帮助我学习方面非常棒。对这个模糊问题的任何帮助将不胜感激。非常感谢!

【问题讨论】:

    标签: c# mysql wpf mvvm datagrid


    【解决方案1】:

    创建单独的类来表示数据库中的数据和 DataGrid 中的数据。

    例如:

    public class Booking
    {
        public int BookingIDNum { get; set; }
        public int BookTypeNum { get; set; }
        public int FacIDNum { get; set; }
    }
    
    public class BookingType
    {
        public int BookTypeNum { get; set; }
        public string BookType { get; set; }
    }
    
    public class Facility
    {
        public int FacIDNum { get; set; }
        public string FacilityName { get; set; }
    }
    
    public class ViewData
    {
        public int BookingIDNum { get; set; }
        public int BookTypeNum { get; set; }
        public string BookType { get; set; }
        public int FacIDNum { get; set; }
        public string FacilityName { get; set; }
    
        public static ViewData From(Booking booking, BookingType bookingType, Facility facility)
        {
            return new ViewData
            {
                BookingIDNum = booking.BookingIDNum,
                BookingTypeNum = booking.BookingTypeNum,
                FacIDNum = booking.FacIDNum,
                BookType = bookingType.BookType,
                FacilityName = facility.FacilityName
            };
        }
    }
    

    在上面的示例中,BookingBookingTypeFacility 类表示数据库中的数据,而 ViewData 将是您绑定到 DataGrid 上的类。

    【讨论】:

    • 好的。这多少有点道理。那么我将如何填充数据库中的每个属性呢?我是否将 MySQL 数据拉取方法放在每个属性的“集合”中,还是可以在 ViewData 类中使用类似于“foreach”的方法?我为我的无知道歉。努力学习。
    • 查看编辑后的答案。 ViewData.From 方法。这能回答你的问题吗?
    • 对不起...我很困惑,可能想太多了...如何将 MySQL 数据库中的数据放入模型类“Bookings”、“BookingType”和“设施”?我认为模型类不应该有任何功能。不?如果没有,我如何将 MySQL 数据放入“ViewData”类?最后,所有不同的属性如何相互关联,所以我不会在列中留下 3 或 4 组不同的列表/集合。 IE:当 Fac_ID_Num 为 1 时,“Joe's Shop”而不仅仅是 Facility_Name 的第三个值?
    • 我是个白痴……我知道。但我真的很努力学习。哈! :-)
    • 然后,您应该实现另一个(或多个)类,该类将从您的数据库中获取数据并将其转换为 Booking、BookingType 和 Facility
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-28
    • 2021-07-04
    • 2021-08-31
    • 1970-01-01
    • 2015-08-07
    相关资源
    最近更新 更多