Я хочу найти лучший способ передать объекты из базы данных SQL Server CE на моем рабочем столе. Приложение Winforms для уменьшения использования памяти.Лучший способ передать объекты SDF между формами
У меня есть локальная база данных .sdf
, связанная с проектом сгенерированным dbml.
Также у меня есть 4 формы:
MainForm
- один основная родительская форма с помощью кнопки, чтобы выбрать объект продукта.ProductSelectForm
- Форма для выбора продукта из базы данных.MainProductForm
- формы детей MDI, которые отображают информацию и диаграммы о выбранном продукте и кнопку, чтобы редактировать эту информацию.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();
}
}
Если я выбираю объект в ProductSelectForm (общедоступный Product ProductSelected), передайте его в MainForm (новый MainProductForm (PSF.ProductSelected)) и откройте его в ProductForm (public Product cProduct;) - это означает, что я использую память 3 раза больше ? – John4
Или ProductSelected совпадает с cProduct и использует один слот памяти? – John4
Зависит от многих факторов. Если это ссылочный тип (класс), тогда память занята только один раз, когда ссылка передается по всем формам. Но даже если вы используете 3 раза память. О какой памяти мы говорим? – nvoigt