1

如何使用 C# winforms 中的 MVP 模式将多个表中的数据显示到我的视图中?

假设我有以下表格:

  1. 水果
  2. 颜色

    Table definition:  
    +----------+  
    | Fruit    |  
    +----------+  
    | Id       |  
    | Name     |  
    | Color_Id |  
    +----------+  
         |∞
         |
         |1
    +----------+  
    | Color    |  
    +----------+  
    | Id       |  
    | Name     |  
    +----------+  
    
    Table contents:  
    
    Fruits  
    +-----+--------+----------+  
    | Id  | Name   | Color_Id |  
    +-----+--------+----------+  
    | 10  | Apple  | 70       |  
    | 20  | Orange | 80       |  
    | 30  | Grapes | 90       |  
    +-----+--------+----------+  
    
    Colors  
    +-----+--------+  
    | Id  | Name   |  
    +-----+--------+  
    | 70  | Red    |  
    | 80  | Orange |  
    | 90  | Violet |  
    +-----+--------+  
    

然后在我的解决方案中,我为每个表创建了类,即 Fruit 和 Color 类,具有自己的 getter 和 setter 以及表示数据库中表的其他详细信息。

然后我还为水果和颜色创建了两个模型。

因此,如果我想创建一个显示有关颜色记录的视图,我将使用我为颜色创建的模型来检索颜色集合(例如List<Color>)。如果我使用 DataGridView 来显示该记录,我会得到类似以下的内容:

    +-----+--------+  
    | Id  | Name   |  
    +-----+--------+  
    | 70  | Red    |  
    | 80  | Orange |  
    | 90  | Violet |  
    +-----+--------+  

对于 Fruit 记录,我可以使用上面相同的方法,但我需要显示颜色名称而不是颜色 ID,如下所示:(假设我使用的是 DataGridView 或自定义控件)

    +-----+--------+----------+  
    | Id  | Name   | Color    |  
    +-----+--------+----------+  
    | 10  | Apple  | Red      |  
    | 20  | Orange | Orange   |  
    | 30  | Grapes | Violet   |  
    +-----+--------+----------+  

我想我可以为它创建另一个类并将其命名为“FruitColor”,然后为其赋予与上面的 Fruit 类相同的属性,但不是具有颜色 id 属性,而是用颜色名称替换它......但我我不确定这是否是 MVP 中正确的做事方式。我想我应该向你们询问有关如何正确操作的任何提示...

我没有在我的项目中使用 ORM,因为我想了解如何手动操作......但我也将不胜感激与使用 ORM 相关的任何帮助。我也是 3 周前才开始了解 MVP,所以我真的希望能得到任何帮助。

4

1 回答 1

2

检索 时Fruit,您应该使用JOINSQL 中的 a 查询颜色:

RETRIEVE f.*, c.name as color_name
FROM Fruits f
INNER JOIN Colors c
ON f.Color_Id = c.Id

Fruit然后,像你可能已经在做的那样转换你得到的结果。但是,这将要求您扩展您的Fruit类,以便它具有string颜色name变量的属性,或者只是添加一个包含整个颜色的属性:

public class Fruit
{
   public int Id { get; set; }
   public string Name { get; set; }
   public Color Color { get; set; }
}
于 2014-10-21T08:35:41.747 回答