In previous post we created a simple winform project and then generated an entity framework data model (EDM) using a small Orders database. Today, we will use the same project and query the data using entity framework from the underlying database and bind it to an element. If you haven't reviewed previous post, I strongly suggest you do so now.
In this example, we will use some of the built in methods such as List to get a list of customers and bind it to the dropdown list.
We will also use Linq to entities to get a list of addresses that are associated with the selected customer and load the address in read only text fields.
Example -
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.Objects;
using System.Data.Objects.DataClasses;
namespace EntiryFramework
{
public partial class Main : Form
{
private OrdersEntities orders;
public Main()
{
InitializeComponent();
}
private void Close_Click(object sender, EventArgs e)
{
this.Close();
}
private void Main_Load(object sender, EventArgs e)
{
//Initialize the ObjectContext
orders = new OrdersEntities();
//Load all customers
List<Customer> customerList = orders.Customers.ToList();
try
{
//bind to the database
this.customerList.DisplayMember = "LastName";
this.customerList.ValueMember = "CustomerID";
this.customerList.DataSource = customerList;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void customerList_SelectedIndexChanged(object sender, EventArgs e)
{
//lets get the addresses that are associated with the selected customer
int customerID = (int)this.customerList.SelectedValue;
IQueryable<CustomerAddress> customerAddress = orders.Customers
.Where(d => d.CustomerID == customerID)
.SelectMany(d => d.CustomerAddresses);
foreach (CustomerAddress address in customerAddress)
{
txtAddress1.Text = address.Address1;
txtAddress2.Text = address.Address2;
txtCity.Text = address.City;
txtState.Text = address.State;
txtZip.Text = address.ZipCode;
}
}
}
}
When you run this application, you will see something like this and as you change the customer name in the drop down list, the address will change.
var customerQuery = from d in orders.Customers
orderby d.LastName
select d;
try
{
// Bind the ComboBox control to the query,
// which is executed during data binding.
// To prevent the query from being executed multiple times during binding,
// it is recommended to bind controls to the result of the Execute method.
this.customerList.DisplayMember = "LastName";
this.customerList.ValueMember = "CustomerID";
this.customerList.DataSource = ((ObjectQuery)customerQuery)
.Execute(MergeOption.AppendOnly);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
In the next post we will update a customer using entity framework.
Thank you.
No comments:
Post a Comment