다음을 통해 공유


AdventureWorks 데이터 바인딩 샘플 SalesOrderDetail 추가 폼(EDM 샘플 응용 프로그램)

AdventureWorks 데이터 바인딩 응용 프로그램에서는 새 SalesOrderDetail 엔터티를 추가할 때 별도의 Windows Form을 사용합니다.

응용 프로그램 코드

사용자가 Accept Order 단추를 클릭하면 새 SalesOrderDetail이 만들어져 저장소에 추가됩니다. 그런 다음 기본 폼 및 buttonAddSalesOrder_Click 처리기로 돌아가 처리됩니다. 여기서 데이터 표가 업데이트됩니다.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using AdventureWorksModel;
using System.Data.Objects;

namespace AdWksSalesWinDataBind
{
    public partial class FormAddSalesOrderDetail : Form
    {
        ObjectContext parentObjCtx = null;
                
        public FormAddSalesOrderDetail()
        {
            InitializeComponent();
        }

        public FormAddSalesOrderDetail(ObjectContext ctx)
        {
            InitializeComponent();
            parentObjCtx = ctx;
        }

        private void buttonCancelOrder_Click(object sender, EventArgs e)
        {
            this.Dispose();
        }

        private void formAddSalesOrderDetail_Load(object sender, EventArgs e)
        {
            if (this.Owner.Controls["textBoxOrderId"].Text.Equals(""))
            {
                MessageBox.Show("Add Sales Order Header Number",
                    "No Header Number");
                this.Dispose() ;
                return;
            }

            bindingSource1.DataSource = 
                ((AdventureWorksEntities)parentObjCtx).
                           Product.Execute(MergeOption.AppendOnly);
            dataGridViewProducts.DataSource = bindingSource1;

        }

        private void buttonAcceptNewOrder_Click(object sender, EventArgs e)
        {
            using (AdventureWorksEntities objCtx = new AdventureWorksEntities())
            {
                SalesOrderDetail newSODetail = new SalesOrderDetail();
                newSODetail.ProductID =
                    Int32.Parse(dataGridViewProducts.SelectedRows[0].Cells[0].Value.ToString());

                if (textBoxQuantity.Text.Equals(""))
                {
                    MessageBox.Show("Enter quantity");
                    return;
                }
                newSODetail.OrderQty = Int16.Parse(textBoxQuantity.Text);

                try
                {
                    newSODetail.CarrierTrackingNumber = "4E0A-4F89-AE";
                    newSODetail.ModifiedDate = DateTime.Now;
                    newSODetail.SpecialOfferID = 1;
                    newSODetail.rowguid = Guid.NewGuid(); // create new guid.
                    newSODetail.UnitPrice =
                        Decimal.Parse(dataGridViewProducts.SelectedRows[0].Cells[9].Value.ToString());
                    if (!textBoxDiscount.Text.Equals(""))
                    {
                        newSODetail.UnitPriceDiscount =
                        Decimal.Parse(textBoxDiscount.Text) * (Decimal).01;
                    }
                    else
                    {
                        newSODetail.UnitPriceDiscount = 0;
                    }

                    Int32 textboxHeaderNumber = Int32.Parse(this.Owner.Controls["textBoxOrderId"].Text);

                    ObjectParameter parameter =
                    new ObjectParameter("p", textboxHeaderNumber);

                    SalesOrderHeader header =
                        objCtx.SalesOrderHeader.Where(
                        "it.SalesOrderID = @p", parameter).
                        FirstOrDefault<SalesOrderHeader>();

                    objCtx.AddToSalesOrderDetail(newSODetail);

                    header.SalesOrderDetail.Add(newSODetail);
                    objCtx.SaveChanges();
                    
                }
                catch (Exception exception)
                {
                    MessageBox.Show("Msg: " + exception.Message + "\r\nInner Exception: " +
                        exception.InnerException);
                }
            }

            
            
        }

        private void textBoxDiscount_Validating(object sender, CancelEventArgs e)
        {
            if(textBoxDiscount.Text.Equals(""))
                return;
            if (Int32.Parse(textBoxDiscount.Text) < 0 || 
                Int32.Parse(textBoxDiscount.Text) > 25 )
            {
                MessageBox.Show("Enter discount between 0 and 25");
            }
            
        }

    }
}

참고 항목

개념

Adventure Works 데이터 바인딩(EDM 샘플 응용 프로그램)
AdventureWorks 데이터 바인딩 샘플 응용 프로그램 코드(EDM 샘플 응용 프로그램)