Beispiel für AdventureWorks-Datenbindungsanwendungscode (EDM-Beispielanwendung)
Im Entity Data Mode (EDM) enthält die AdventureWorks-Datenbindungsanwendung zwei Ereignishandler, die Daten laden und ändern. Der Code, der einen SalesOrderHeader und dessen zugeordnete SalesOrderDetail-Entitäten lädt, wird ausgeführt, wenn der Benutzer auf buttonGetHeader
klickt. Änderungen an den in einer SalesOrderDetail-Entität enthaltenen Daten werden durch den Ereignishandler cellEndEdit
des Auftragsdetails-Gitters übermittelt.
Anwendungscode
Der Code für das primäre Windows-Formular, das in der AdventureWorks-Datenbindungsanwendung verwendet wird, ist im Folgenden dargestellt:
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 Form1 : Form
{
public Form1()
{
InitializeComponent();
objCtx = new AdventureWorksEntities();
}
private void buttonGetHeader_Click(object sender, EventArgs e)
{
if (textBoxOrderId.Text.Equals(""))
{
MessageBox.Show("Add Sales Order Header Number",
"No Header Number");
return;
}
ObjectParameter parameter =
new ObjectParameter("p", Int32.Parse(textBoxOrderId.Text));
dataGridViewSOHeader.DataSource = objCtx.SalesOrderHeader.Where(
"it.SalesOrderID == @p", parameter).Execute(MergeOption.OverwriteChanges);
if(objCtx.SalesOrderHeader.Where(
"it.SalesOrderID == @p", parameter).Any())
{
SalesOrderHeader resultHeader =
objCtx.SalesOrderHeader.Where(
"it.SalesOrderID == @p", parameter).First();
resultHeader.SalesOrderDetail.Load();
dataGridViewOrderDetails.DataSource = resultHeader.SalesOrderDetail;
}
else
MessageBox.Show(
"No Sales Order Header matches this key",
"No Match");
}
private void Form1_FormClosing(object sender,
FormClosingEventArgs e)
{
objCtx.Connection.Close();
objCtx.Dispose();
}
private void dataGridViewSOHeader_CellEndEdit(object sender,
DataGridViewCellEventArgs e)
{
objCtx.SaveChanges();
}
private void dataGridViewOrderDetails_CellEndEdit(object sender,
DataGridViewCellEventArgs e)
{
objCtx.SaveChanges();
ObjectParameter parameter =
new ObjectParameter("p", Int32.Parse(textBoxOrderId.Text));
SalesOrderHeader header =
objCtx.SalesOrderHeader.Where(
"it.SalesOrderID == @p", parameter).FirstOrDefault();
// Refresh the SalesOrderHeader in the grid.
objCtx.Refresh(RefreshMode.StoreWins, header);
}
private void buttonAddSalesOrder_Click(object sender, EventArgs e)
{
FormAddSalesOrderDetail formAddSODetail = new FormAddSalesOrderDetail(objCtx);
DialogResult dlgResult = formAddSODetail.ShowDialog(this);
if(dlgResult.Equals(DialogResult.OK))
{
ObjectParameter parameter =
new ObjectParameter("p", Int32.Parse(textBoxOrderId.Text));
SalesOrderHeader header =
objCtx.SalesOrderHeader.Where(
"it.SalesOrderID == @p", parameter).FirstOrDefault();
// Refresh the SalesOrderDetails in the grid.
buttonGetHeader_Click(null, null);
}
}
private void textBoxOrderId_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
if (e.KeyCode.Equals(Keys.Return))
buttonGetHeader_Click(this, System.EventArgs.Empty);
}
}
}
Siehe auch
Konzepte
AdventureWorks-Datenbindung (EDM-Beispielanwendung)
AdventureWorks-Datenbindungsbeispiel 'Add SalesOrderDetail'-Formular (EDM-Beispielanwendung)