Поделиться через


Код приложения привязки данных AdventureWorks (образец приложения модели EDM)

Приложение AdventureWorks, основанное на привязке данных, включает два обработчика событий, которые загружают и модифицируют данные. Код, в котором происходит загрузка сущности SalesOrderHeader и связанных с ней сущностей SalesOrderDetail, выполняется после того, как пользователь нажимает кнопку buttonGetHeader. Модификации в данных, содержащиеся в сущности SalesOrderDetail, передаются в обработчик событий сетки cellEndEdit с подробными сведениями о заказе.

Код приложения

Ниже приведен код основной формы Windows, используемой в приложении AdventureWorks, основанном на привязке данных.

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);

        }

        
        
    }
}

См. также

Основные понятия

Привязка данных Adventure Works (образец приложения модели EDM)
Форма добавления элементов SalesOrderDetail из образца приложения привязки данных AdventureWorks (образец приложения модели EDM)