在表单之间传递SDF对象的最佳方法

时间:2014-10-10 07:21:08

标签: c# sql-server-ce

我想找到一种在桌面Winforms应用程序中从SQL Server CE数据库传递对象的最佳方法,以减少内存使用量。

我有一个.sdf本地数据库通过生成的dbml连接到项目。

我也有4种形式:

  1. MainForm - 一个主要的父表单,其中包含用于选择“产品对象”的按钮。
  2. ProductSelectForm - 从数据库中选择产品的表单。
  3. MainProductForm - 显示所选产品的信息和图表的MDI子窗体以及编辑此信息的按钮。
  4. ProductForm - 可以添加新产品或编辑所选产品信息的表单。
  5. 我看到两个选项:要么传递项目ID,要么传递Item对象。

    基于下面的示例,在表单之间传递信息的最佳方法是:通过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();
            }
    }
    

1 个答案:

答案 0 :(得分:0)

如果您通过ID传递,则每个表单都必须从数据库中重新选择数据。这对于开发人员的PC 来说都是很多工作。您的产品可能具有完全可忽略不计的内存占用。因此,如果你不是为一个受内存挑战的系统进行编程(现在这意味着半个电话或破坏计算器或其他东西),那么无论如何都要创建一个使用更多内存而不是更少内存的系统由于开发人员不需要在每种形式下重新发明轮子,因此电池使用率和错误更少。