2017-11-30 3 views
0

Ok ... wie ich mir meinen Weg durchzuwursteln Unterricht weiter ... Hier ist meine letzte Frage. Ha! Ich habe eine WPF-App MVVM und drei verschiedene Proben MySQL-Tabellen wie folgt verwendet:WPF MVVM ObservableCollection/Datagrid mehr SQL-Tabellen

BOOKINGS

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 | 

ANLAGEN

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

Ich werde dies versuchen, so kurz und bündig wie möglich zu erklären, fühlen Sie sich frei zu kritisieren ... Ich möchte ein ObservableCollection füllen und diese ObservableCollection an ein Datagrid übergeben. Ich weiß, wie man eine ObservableCollection durch eine Model-Klasse füllt, aber ich weiß nicht, wie man mit mehreren Tabellen füllt. In diesem Beispiel würde Ich mag eine beobachtbare Sammlung haben, in dem Ansichtsmodell an ein Datagrid übergeben, die wie folgt strukturiert:

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 | 

Grundsätzlich mag ich die Book_Type und Facility_Name in der endgültigen Lösung verwenden, ohne zu machen, die zu irgendwelche Anpassungen in der MySQL-Datenbank wie das Erstellen einer neuen "Ansicht" oder etwas. Ist das sinnvoll? Diese Seite hat mir beim Lernen sehr geholfen. Jede Hilfe zu dieser vagen Frage würde sehr geschätzt werden. Ich danke dir sehr!

Antwort

1

separate Klassen erstellen, die Daten in Ihrer Datenbank und Daten auf Ihrem Datagrid darstellt.

Zum Beispiel:

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 
     }; 
    } 
} 

auf dem obigen Beispiel die Klassen Booking, BookingType und Facility stellen Daten in Ihrer Datenbank während ViewData wird die Klasse, die Sie auf Ihrem DataGrid binden sein.

+0

Ok. Das macht etwas Sinn. Also, wie würde ich jede Eigenschaft aus der Datenbank füllen? Setze ich die MySQL-Daten-Pull-Methode in die "Menge" jeder Eigenschaft oder gibt es so etwas wie eine "foreach" -Methode, die ich mit der ViewData-Klasse verwenden kann? Ich entschuldige mich für meine Ignoranz. Versuche zu lernen. – Progolfer79

+0

Siehe bearbeitete Antwort. ViewData.From-Methode. Beantwortet das deine Frage? –

+0

Es tut mir leid ... Ich bin so verwirrt und wahrscheinlich weit über das Denken dieses ... wie kann ich die Daten aus der MySQL-Datenbank in die Modellklassen „Buchungen“, „BookingType“ und „Facility“ erhalten? Ich dachte, die Modellklassen hätten keine Funktion. Nein? Wenn nicht, wie bekomme ich die MySQL-Daten in die Klasse "ViewData"? Wie hängen schließlich alle verschiedenen Eigenschaften zusammen, so dass ich nicht 3 oder 4 verschiedene Sätze von Listen/Sammlungen in den Spalten übrig habe. IE: wenn Fac_ID_Num 1 ist, "Joe's Shop" und nicht nur der 3. Wert von Facility_Name? – Progolfer79