2012-04-14 82 views
0

情況...將一個對象的屬性複製到另一個具有相同基底的對象

我正在爲一個asp.net網站創建一個購物車。我有一個Cart對象,它將包含一個CartItem對象列表。而不是創造的CartItem對象,如ID,產品名稱,說明,價格所需的屬性...我認爲這將是聰明的簡單繼承這樣的數據集表中的數據行...

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

現在如果我獲取包含我想要的行的DanubeDataSet.ProductsTable對象,如何設置我的基礎對象中的所有屬性?這是行不通的...

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

它不能從類型DanubeDataSet.ProductsRow強制轉換爲CartItem。我明白這是爲什麼,但必須有一種方法將ProductsRow的數據移動到CartItem,因爲它包含ProductsRow的所有屬性。我錯了嗎?

如果您有解決方案,請記住,我不想更改DanubeDataSet.ProductsRow中的代碼,因爲它是自動生成的。謝謝。

回答

0

你不能做你想用繼承做什麼。但是,有一種使用部分類來完成此操作的簡便方法。以下是您的操作:打開數據集,右鍵單擊設計界面並從上下文菜單中選擇查看代碼。這爲數據集創建了一個代碼隱藏文件。然後添加您的財產如下:

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

感謝您的快速反應。我喜歡你的想法,但我無法遵循你的指示。當我雙擊DanubeDataSet.xsd打開數據集時,當我右鍵單擊以顯示上下文菜單時,View Code不是一個選項。只有「添加」擴展,讓我添加一個表適配器,數據表,查詢等和「預覽數據」,屬性。建議? – Theo 2012-04-14 04:18:20

+0

我手動添加了代碼後面的代碼,它解決了。謝謝。 – Theo 2012-04-14 04:49:23

+0

我不確定爲什麼查看代碼選項不可用,它可能是您的Visual Studio版本不支持這一點,甚至在C#語言中也不支持它。我很高興這只是一點點手動工作。 – 2012-04-14 22:59:10

相關問題