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 샘플 응용 프로그램)