2012-04-14 5 views
0

Ситуация ...Скопируйте свойства одного объекта другому объекту с тем же основанием

Я создаю корзину покупок для сайта asp.net. У меня есть объект Cart, который будет содержать список объектов CartItem. Вместо того, чтобы создать необходимые свойства объекта CartItem, такие как ID, ProductName, описание, цена ... Я думал, что это было бы умным, чтобы просто унаследовать DataRow из таблицы набора данных, как это ...

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. Я понимаю, почему это так, но есть способ переместить данные ProductRow в CartItem, поскольку он содержит все свойства ProductRow. Я ошибаюсь?

Если у вас есть решение, имейте в виду, что я не хочу менять код в файле DanubeDataSet.ProductsRow, поскольку он автогенерируется. Спасибо.

ответ

0

Вы не можете делать то, что вы пытаетесь сделать с наследованием. Тем не менее, есть удобный способ сделать это, используя частичные классы. Вот что вы делаете: откройте свой набор данных, щелкните правой кнопкой мыши по поверхности дизайна и выберите «Просмотреть код» в контекстном меню. Это создает файл с кодом для набора данных. Затем добавьте свое имущество следующим образом:

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

Спасибо за быстрый ответ. Мне нравится ваша идея, но я не могу следовать вашим указаниям. Когда я дважды щелкаю DanubeDataSet.xsd, чтобы открыть набор данных, View Code не является параметром, когда я нажимаю правой кнопкой мыши, чтобы отобразить контекстное меню. Существует только «Добавить», который расширяется, чтобы я мог добавить адаптер таблицы, datatable, query и т. Д. И «Предварительный просмотр данных», «Свойства». Предложения? – Theo

+0

Я вручную добавил код за файлом, и он сработал. Спасибо. – Theo

+0

Я не уверен, почему опция «Код просмотра» недоступна, возможно, ваша версия Visual Studio не поддерживает это, даже на языке C# она ее поддерживает. Я рад, что это сработало с небольшим ручным усилием. –