2012-04-14 5 views
0

Die Situation ...Kopieren von Eigenschaften eines Objekts in ein anderes Objekt mit derselben Basis

Ich erstelle einen Einkaufswagen für eine asp.net-Website. Ich habe ein Warenkorb-Objekt, das eine Liste von CartItem-Objekten enthalten wird. Anstatt schaffen die erforderlichen Eigenschaften für das CartItem Objekt wie ID, Product, Beschreibung, Preis ... dachte ich, es klug wäre, einfach die datarow aus der Datensatz Tabelle erbt so ...

public class CartItem : DanubeDataSet.ProductsRow 
{ 
public int Quantity { get; set; } 

public CartItem(System.Data.DataRowBuilder rb) : base(rb) 
{ 
    Quantity = 1; 
} 

public decimal TotalCost 
{ 
    get 
    { 
     return Quantity * Price; 
    } 
} 
} 

Jetzt Wenn ich ein DanubeDataSet.ProductsTable-Objekt mit einer gewünschten Zeile erhalte, wie lege ich alle Eigenschaften in meinem Basisobjekt fest? Dies funktioniert nicht ...

DanubeDataSet.ProductsDataTable productTable = new DanubeDataSetTableAdapters.ProductsTableAdapter().GetProductByID(itemId); 
    CartItem newItem = (CartItem)productTable[0]; 
    items.Add(newItem); 

Es kann nicht vom Typ DanubeDataSet.ProductsRow zu CartItem gegossen. Ich verstehe, warum das so ist, aber es muss eine Möglichkeit geben, die Daten eines ProductsRow in ein CartItem zu verschieben, da es alle Eigenschaften von ProductsRow enthält. Liege ich falsch?

Wenn Sie eine Lösung haben, denken Sie daran, dass ich den Code in DanubeDataSet.ProductsRow nicht ändern möchte, da er automatisch generiert wird. Vielen Dank.

Antwort

0

Sie können nicht tun, was Sie mit der Vererbung zu tun versuchen. Es gibt jedoch eine bequeme Möglichkeit, dies mit partiellen Klassen zu tun. Hier ist, was Sie tun: Öffnen Sie Ihren Datensatz, klicken Sie mit der rechten Maustaste auf die Entwurfsoberfläche und wählen Sie im Kontextmenü Code anzeigen. Dies erstellt eine Code-Behind-Datei für den Datensatz. Dann fügen Sie Ihre Eigenschaft wie folgt hinzu:

public partial class DanubeDataSet 
{ 
    partial class ProductsRow 
    { 
     public decimal TotalCost 
     { 
      get 
      { 
       return Quantity * Price; 
      } 
     } 
    } 
} 
+0

Danke für die schnelle Antwort. Ich mag deine Idee, aber ich kann deinen Anweisungen nicht folgen. Wenn ich auf den DanubeDataSet.xsd doppelklicke, um den Datensatz zu öffnen, ist View Code keine Option, wenn ich mit der rechten Maustaste klicke, um das Kontextmenü anzuzeigen. Es gibt nur "Hinzufügen", das erweitert wird, um mir einen Tabellenadapter, eine Datentabelle, eine Abfrage usw. hinzuzufügen. Und "Vorschaudaten", Eigenschaften. Vorschläge? – Theo

+0

Ich habe den Code hinter der Datei manuell hinzugefügt und es hat geklappt. Vielen Dank. – Theo

+0

Ich bin mir nicht sicher, warum die Option "Code anzeigen" nicht verfügbar war. Möglicherweise unterstützt Ihre Version von Visual Studio dies nicht, auch wenn sie in der C# -Sprache unterstützt wird. Ich bin froh, dass dies mit ein wenig Handarbeit gelungen ist. –

Verwandte Themen