|
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 MultiTableDatagrid.App_Data;
namespace MultiTableDatagrid
{
public partial class frmMultiTable : Form
{
public frmMultiTable()
{
InitializeComponent();
}
private void frmMultiTable_Load(object sender, EventArgs e)
{
LoadDataIntoGrid();
toolStripSave.Enabled = false;
toolStripCancel.Enabled = false;
}
private void LoadDataIntoGrid()
{
List<OrdersDetails> ordersCollection = new List<OrdersDetails>();
NORTHWINDEntities context = new NORTHWINDEntities();
context.Connection.Open();
int counter = context.Orders.Count();
for (int i = 0; i < context.Orders.Count() - 1; i++)
{
// AutoMapper library can be used alternatively to perform this mapping.
OrdersDetails item = new OrdersDetails();
item.OrderID = context.Orders.ToList()[i].OrderID;
item.OrderDate = context.Orders.ToList()[i].OrderDate;
item.Quantity = context.Order_Details.ToList()[i].Quantity;
item.Discount = context.Order_Details.ToList()[i].Discount;
item.UnitPrice = context.Order_Details.ToList()[i].UnitPrice;
item.ShipName = context.Orders.ToList()[i].ShipName;
item.ShipAddress = context.Orders.ToList()[i].ShipAddress;
item.ShipCity = context.Orders.ToList()[i].ShipCity;
item.ShipCountry = context.Orders.ToList()[i].ShipCountry;
item.ShippedDate = context.Orders.ToList()[i].ShippedDate;
ordersCollection.Add(item);
item = null;
}
gridbindingSource.DataSource = ordersCollection;
multiTabledataGridView.DataSource = null;
multiTabledataGridView.DataSource = gridbindingSource;
multiTabledataGridView.Refresh();
statusStrip1.Text = counter + " Item(s)";
context.Connection.Close();
context.Connection.Dispose();
context.Dispose();
}
private void SaveDatafromGrid()
{
List<OrdersDetails> ordersCollection = new List<OrdersDetails>();
NORTHWINDEntities context = new NORTHWINDEntities();
ordersCollection = (List<OrdersDetails>) gridbindingSource.DataSource;
context.Connection.Open();
for (int i = 0; i < context.Orders.Count() - 1; i++)
{
// AutoMapper library can be used alternatively to perform this mapping.
OrdersDetails item = new OrdersDetails();
context.Orders.ToList()[i].OrderDate = ordersCollection.ToList()[i].OrderDate;
context.Orders.ToList()[i].ShipName = ordersCollection.ToList()[i].ShipName;
context.Orders.ToList()[i].ShipAddress = ordersCollection.ToList()[i].ShipAddress;
context.Orders.ToList()[i].ShipCity = ordersCollection.ToList()[i].ShipCity;
context.Orders.ToList()[i].ShipCountry = ordersCollection.ToList()[i].ShipCountry;
context.Orders.ToList()[i].ShippedDate = ordersCollection.ToList()[i].ShippedDate;
context.Order_Details.ToList()[i].Quantity = (short)ordersCollection.ToList()[i].Quantity;
context.Order_Details.ToList()[i].Discount = ordersCollection.ToList()[i].Discount;
context.Order_Details.ToList()[i].UnitPrice = ordersCollection.ToList()[i].UnitPrice;
}
gridbindingSource.DataSource = ordersCollection;
multiTabledataGridView.DataSource = null;
multiTabledataGridView.DataSource = gridbindingSource;
multiTabledataGridView.Refresh();
context.SaveChanges();
context.Connection.Close();
context.Connection.Dispose();
context.Dispose();
}
private void DeleteDatafromGrid(int rowIndex)
{
List<OrdersDetails> ordersCollection; // = new List<OrdersDetails>();
NORTHWINDEntities context = new NORTHWINDEntities();
ordersCollection = (List<OrdersDetails>)gridbindingSource.DataSource;
context.Connection.Open();
int orderId;
//Retrieve the OrderID
orderId = ordersCollection.ElementAt(rowIndex).OrderID;
var order = (from o in context.Orders
where o.OrderID == orderId
select o).First();
//Delete the row from Order_Details child table first & then from the Orders table.
if (!order.Order_Details.IsLoaded)
order.Order_Details.Load();
int counter = order.Order_Details.Count();
for (int i = 0; i < counter; i++)
{
context.DeleteObject(order.Order_Details.First());
}
context.SaveChanges();
context.DeleteObject(order);
gridbindingSource.Remove(gridbindingSource.Current);
multiTabledataGridView.Refresh();
context.SaveChanges();
context.Connection.Close();
context.Connection.Dispose();
context.Dispose();
}
private void multiTabledataGridView_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)
{
toolStripSave.Enabled = true;
toolStripCancel.Enabled = true;
}
private void multiTabledataGridView_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
multiTabledataGridView.EndEdit();
}
private void toolStripSave_Click(object sender, EventArgs e)
{
multiTabledataGridView.EndEdit();
SaveDatafromGrid();
toolStripSave.Enabled = false;
toolStripCancel.Enabled = false;
}
private void toolStripDelete_Click(object sender, EventArgs e)
{
if (multiTabledataGridView.CurrentCell.RowIndex > -1)
{
DeleteDatafromGrid(multiTabledataGridView.CurrentCell.RowIndex);
}
}
private void toolStripCancel_Click(object sender, EventArgs e)
{
multiTabledataGridView.CancelEdit();
toolStripSave.Enabled = false;
toolStripCancel.Enabled = false;
}
private void toolStripRefresh_Click(object sender, EventArgs e)
{
toolStrip1.Enabled = false;
LoadDataIntoGrid();
toolStrip1.Enabled = true;
}
}
}
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.