2014-10-10 2 views
0

Я хочу найти лучший способ передать объекты из базы данных SQL Server CE на моем рабочем столе. Приложение Winforms для уменьшения использования памяти.Лучший способ передать объекты SDF между формами

У меня есть локальная база данных .sdf, связанная с проектом сгенерированным dbml.

Также у меня есть 4 формы:

  1. MainForm - один основная родительская форма с помощью кнопки, чтобы выбрать объект продукта.
  2. ProductSelectForm - Форма для выбора продукта из базы данных.
  3. MainProductForm - формы детей MDI, которые отображают информацию и диаграммы о выбранном продукте и кнопку, чтобы редактировать эту информацию.
  4. ProductForm - Форма, которая может добавить новый продукт или изменить информацию о выбранном продукте.

Я вижу два варианта: либо пройти идентификатор предметов, либо передать предмет предмета.

Основываясь на приведенном ниже примере, как лучше всего было бы передавать информацию между формами: по id или по объекту?

Возможно, другие рекомендации?

Главная форма:

public MainForm() 
{ 
    InitializeComponent(); 
} 

private void ProductSelectBarButton_ItemClick(object sender, ItemClickEventArgs e) 
{ 
     ProductSelectForm PSF = new ProductSelectForm(); 

     if (PSF.ShowDialog() == DialogResult.OK) 
     { 
       MainProductForm MPF = new MainProductForm(PSF.ProductSelected); 
       MPF.MdiParent = this; 
       MPF.Show(); 
     } 

     PSF.Dispose(); 
} 

ProductSelectForm:

public Product ProductSelected = null;  

public ProductSelectForm() { InitializeComponent(); } 

private void OKButton_Click(object sender, EventArgs e) 
{ 
     var ActiveItem = ProductGrid.GetFocusedRowCellValue("Product_ID"); 
     ProductSelected = DB.Product.Where(x => x.Product_ID == (int)ActiveItem).Single(); 
     this.Close();     
} 

MainProductForm:

public Product cProduct;   

public MainProductForm(Product product) { 
     InitializeComponent(); 
     cProduct = product; 
     this.Text = cProduct.Product_Name; 
} 

private void ProductEditBarButton_ItemClick(object sender, ItemClickEventArgs e) 
{ 
     ProductForm PF = new ProductForm(EditMode.Edit, cProduct.Product_ID); 
     PF.ShowDialog(); 
     PF.Dispose(); 
     Form_Refresh(); 
} 

ProductForm:

private Product T = null; 
private EditMode Mode; 
public Product ProductAdded = null; 

public ProductForm(EditMode mode) : this(mode, 0) { } 

public ProductForm(EditMode mode, int ID) 
{ 
     InitializeComponent(); 
     Mode = mode;   
     switch (Mode) 
     { 
      case (EditMode.Add): 
       T = new Product(); 
       break; 

      case (EditMode.Edit): 
       T = CurrentState.cDB.Product.Where(x => x.Product_ID == ID).Single(); 
       NameEdit.Text = T.Product_Name; 
       break; 
     }    
} 

private void OKButton_Click(object sender, EventArgs e) 
{ 
      T.Product_Name = NameEdit.Text; 
      if (Mode == EditMode.Add) 
      { 
       DB.Product.InsertOnSubmit(T); 
      } 
      DB.SubmitChanges(); 
      if (Mode == EditMode.Add) 
       ProductAdded = DB.Product.Where(x => x.Product_ID == T.Product_ID).Single(); 
      this.Close(); 
     } 
} 

ответ

0

Если вы передаете по ID, каждая форма должна повторно выбрать данные из базы данных. Это очень много работы, как для ПК , так и для. Вероятно, ваш продукт имеет совершенно незначительный объем памяти. Поэтому, если вы не программируете для системы с памятью (и сегодня это будет означать половину телефона или сломанный калькулятор или что-то еще), то непременно создайте систему, которая использует немного больше памяти в пользу меньшего использования батареи и меньше ошибок из-за того, что разработчику не нужно изобретать велосипед в каждой форме.

+0

Если я выбираю объект в ProductSelectForm (общедоступный Product ProductSelected), передайте его в MainForm (новый MainProductForm (PSF.ProductSelected)) и откройте его в ProductForm (public Product cProduct;) - это означает, что я использую память 3 раза больше ? – John4

+0

Или ProductSelected совпадает с cProduct и использует один слот памяти? – John4

+0

Зависит от многих факторов. Если это ссылочный тип (класс), тогда память занята только один раз, когда ссылка передается по всем формам. Но даже если вы используете 3 раза память. О какой памяти мы говорим? – nvoigt

Смежные вопросы