diff --git a/RadGridViewEFCodeFirst.Data/App.config b/RadGridViewEFCodeFirst.Data/App.config index 4c09305..b02d3e9 100644 --- a/RadGridViewEFCodeFirst.Data/App.config +++ b/RadGridViewEFCodeFirst.Data/App.config @@ -11,6 +11,6 @@ - + \ No newline at end of file diff --git a/RadGridViewEFCodeFirst.Data/Common/DataGenerator.cs b/RadGridViewEFCodeFirst.Data/Common/DataGenerator.cs new file mode 100644 index 0000000..1db9a81 --- /dev/null +++ b/RadGridViewEFCodeFirst.Data/Common/DataGenerator.cs @@ -0,0 +1,51 @@ +using RadGridViewEFCodeFirst.Data.Contracts; +using RadGridViewEFCodeFirst.Models; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace RadGridViewEFCodeFirst.Data.Common +{ + public class DataGenerator + { + public static void PopulateData(IRadGridViewEFCodeFirstData data) + { + for (int i = 1; i <= 100; i++) + { + OrderType orderType = new OrderType() + { + OrderTypeId = i, + Description = "Test" + i + }; + + Order order = new Order() + { + OrderId = i, + Description = "Description" + i, + OrderTypeId = orderType.OrderTypeId + }; + + Shipper shipper = new Shipper() + { + ShipperId = i, + Name = "Name " + i, + OrderTypeId = orderType.OrderTypeId, + Address = "Address " + i, + }; + + data.OrderTypes.Add(orderType); + data.Orders.Add(order); + data.Shippers.Add(shipper); + + if (i % 100 == 0) + { + data.SaveChanges(); + } + } + + data.SaveChanges(); + } + } +} diff --git a/RadGridViewEFCodeFirst.Data/Contracts/IGenericRepository.cs b/RadGridViewEFCodeFirst.Data/Contracts/IGenericRepository.cs index c03c352..52ca688 100644 --- a/RadGridViewEFCodeFirst.Data/Contracts/IGenericRepository.cs +++ b/RadGridViewEFCodeFirst.Data/Contracts/IGenericRepository.cs @@ -1,9 +1,6 @@ using System; -using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; -using System.Text; -using System.Threading.Tasks; namespace RadGridViewEFCodeFirst.Data.Contracts { diff --git a/RadGridViewEFCodeFirst.Data/Contracts/IRadGridViewEFCodeFirstContext.cs b/RadGridViewEFCodeFirst.Data/Contracts/IRadGridViewEFCodeFirstContext.cs index 919eef7..89d8636 100644 --- a/RadGridViewEFCodeFirst.Data/Contracts/IRadGridViewEFCodeFirstContext.cs +++ b/RadGridViewEFCodeFirst.Data/Contracts/IRadGridViewEFCodeFirstContext.cs @@ -1,11 +1,9 @@ -using RadGridViewEFCodeFirst.Models; -using System; -using System.Collections.Generic; +using System; using System.Data.Entity; using System.Data.Entity.Infrastructure; using System.Linq; -using System.Text; -using System.Threading.Tasks; + +using RadGridViewEFCodeFirst.Models; namespace RadGridViewEFCodeFirst.Data.Contracts { @@ -15,6 +13,8 @@ public interface IRadGridViewEFCodeFirstContext IDbSet OrderTypes { get; set; } + IDbSet Shippers { get; set; } + IDbSet Set() where T : class; DbEntityEntry Entry(T entity) where T : class; diff --git a/RadGridViewEFCodeFirst.Data/Contracts/IRadGridViewEFCodeFirstData.cs b/RadGridViewEFCodeFirst.Data/Contracts/IRadGridViewEFCodeFirstData.cs index a8d1445..8b2d5e2 100644 --- a/RadGridViewEFCodeFirst.Data/Contracts/IRadGridViewEFCodeFirstData.cs +++ b/RadGridViewEFCodeFirst.Data/Contracts/IRadGridViewEFCodeFirstData.cs @@ -1,9 +1,7 @@ -using RadGridViewEFCodeFirst.Models; -using System; -using System.Collections.Generic; +using System; using System.Linq; -using System.Text; -using System.Threading.Tasks; + +using RadGridViewEFCodeFirst.Models; namespace RadGridViewEFCodeFirst.Data.Contracts { @@ -12,5 +10,9 @@ public interface IRadGridViewEFCodeFirstData IGenericRepository Orders { get; } IGenericRepository OrderTypes { get; } + + IGenericRepository Shippers { get; } + + void SaveChanges(); } } diff --git a/RadGridViewEFCodeFirst.Data/Migrations/Configuration.cs b/RadGridViewEFCodeFirst.Data/Migrations/Configuration.cs index 4506322..81d8437 100644 --- a/RadGridViewEFCodeFirst.Data/Migrations/Configuration.cs +++ b/RadGridViewEFCodeFirst.Data/Migrations/Configuration.cs @@ -1,7 +1,6 @@ namespace RadGridViewEFCodeFirst.Data.Migrations { using System; - using System.Data.Entity; using System.Data.Entity.Migrations; using System.Linq; @@ -9,7 +8,6 @@ internal sealed class Configuration : DbMigrationsConfiguration + - + + Code + - + diff --git a/RadGridViewEFCodeFirst.Data/RadGridViewEFCodeFirstContext.cs b/RadGridViewEFCodeFirst.Data/RadGridViewEFCodeFirstContext.cs index 5b5e2e1..119e9b8 100644 --- a/RadGridViewEFCodeFirst.Data/RadGridViewEFCodeFirstContext.cs +++ b/RadGridViewEFCodeFirst.Data/RadGridViewEFCodeFirstContext.cs @@ -1,12 +1,10 @@ -using RadGridViewEFCodeFirst.Data.Contracts; -using RadGridViewEFCodeFirst.Data.Migrations; -using RadGridViewEFCodeFirst.Models; -using System; -using System.Collections.Generic; +using System; using System.Data.Entity; using System.Linq; -using System.Text; -using System.Threading.Tasks; + +using RadGridViewEFCodeFirst.Data.Contracts; +using RadGridViewEFCodeFirst.Data.Migrations; +using RadGridViewEFCodeFirst.Models; namespace RadGridViewEFCodeFirst.Data { @@ -19,10 +17,11 @@ public RadGridViewEFCodeFirstContext() } public IDbSet Orders { get; set; } - public IDbSet OrderTypes { get; set; } + public IDbSet Shippers { get; set; } + public new IDbSet Set() where T : class { return base.Set(); diff --git a/RadGridViewEFCodeFirst.Data/RadGridViewEFCodeFirstData.cs b/RadGridViewEFCodeFirst.Data/RadGridViewEFCodeFirstData.cs index 9be92dd..d6f4848 100644 --- a/RadGridViewEFCodeFirst.Data/RadGridViewEFCodeFirstData.cs +++ b/RadGridViewEFCodeFirst.Data/RadGridViewEFCodeFirstData.cs @@ -1,11 +1,9 @@ -using RadGridViewEFCodeFirst.Data.Contracts; -using RadGridViewEFCodeFirst.Data.Repositories; -using RadGridViewEFCodeFirst.Models; -using System; +using System; using System.Collections.Generic; using System.Linq; -using System.Text; -using System.Threading.Tasks; + +using RadGridViewEFCodeFirst.Data.Contracts; +using RadGridViewEFCodeFirst.Models; namespace RadGridViewEFCodeFirst.Data { @@ -41,6 +39,14 @@ public IGenericRepository OrderTypes } } + public IGenericRepository Shippers + { + get + { + return this.GetRepository(); + } + } + public void SaveChanges() { this.context.SaveChanges(); @@ -51,8 +57,7 @@ private IGenericRepository GetRepository() where T : class var typeOfModel = typeof(T); if (!this.repositories.ContainsKey(typeOfModel)) { - var type = typeof(GenericRepository); - + Type type = typeof(RadGridViewEFCodeFirstRepository); this.repositories.Add(typeOfModel, Activator.CreateInstance(type, this.context)); } diff --git a/RadGridViewEFCodeFirst.Data/Repositories/GenericRepository.cs b/RadGridViewEFCodeFirst.Data/RadGridViewEFCodeFirstRepository.cs similarity index 80% rename from RadGridViewEFCodeFirst.Data/Repositories/GenericRepository.cs rename to RadGridViewEFCodeFirst.Data/RadGridViewEFCodeFirstRepository.cs index f5e450e..724fc61 100644 --- a/RadGridViewEFCodeFirst.Data/Repositories/GenericRepository.cs +++ b/RadGridViewEFCodeFirst.Data/RadGridViewEFCodeFirstRepository.cs @@ -1,21 +1,19 @@ -using RadGridViewEFCodeFirst.Data.Contracts; -using System; -using System.Collections.Generic; +using System; using System.Data.Entity; using System.Data.Entity.Infrastructure; using System.Linq; using System.Linq.Expressions; -using System.Text; -using System.Threading.Tasks; -namespace RadGridViewEFCodeFirst.Data.Repositories +using RadGridViewEFCodeFirst.Data.Contracts; + +namespace RadGridViewEFCodeFirst.Data { - public class GenericRepository : IGenericRepository where T : class + public class RadGridViewEFCodeFirstRepository : IGenericRepository where T : class { private IRadGridViewEFCodeFirstContext context; private IDbSet set; - public GenericRepository(IRadGridViewEFCodeFirstContext context) + public RadGridViewEFCodeFirstRepository(IRadGridViewEFCodeFirstContext context) { this.context = context; this.set = context.Set(); diff --git a/RadGridViewEFCodeFirst.Models/App.config b/RadGridViewEFCodeFirst.Models/App.config index 4c09305..b02d3e9 100644 --- a/RadGridViewEFCodeFirst.Models/App.config +++ b/RadGridViewEFCodeFirst.Models/App.config @@ -11,6 +11,6 @@ - + \ No newline at end of file diff --git a/RadGridViewEFCodeFirst.Models/Order.cs b/RadGridViewEFCodeFirst.Models/Order.cs index a95bf21..1f8a804 100644 --- a/RadGridViewEFCodeFirst.Models/Order.cs +++ b/RadGridViewEFCodeFirst.Models/Order.cs @@ -1,8 +1,5 @@ using System; -using System.Collections.Generic; using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace RadGridViewEFCodeFirst.Models { diff --git a/RadGridViewEFCodeFirst.Models/OrderType.cs b/RadGridViewEFCodeFirst.Models/OrderType.cs index 8839a4f..f34228d 100644 --- a/RadGridViewEFCodeFirst.Models/OrderType.cs +++ b/RadGridViewEFCodeFirst.Models/OrderType.cs @@ -9,10 +9,12 @@ namespace RadGridViewEFCodeFirst.Models public class OrderType { private ICollection orders; + private ICollection shippers; public OrderType() { this.orders = new HashSet(); + this.shippers = new HashSet(); } public int OrderTypeId { get; set; } @@ -29,6 +31,18 @@ public virtual ICollection Orders } } + public virtual ICollection Shippers + { + get + { + return this.shippers; + } + set + { + this.shippers = value; + } + } + public string Description { get; set; } } } diff --git a/RadGridViewEFCodeFirst.Models/RadGridViewEFCodeFirst.Models.csproj b/RadGridViewEFCodeFirst.Models/RadGridViewEFCodeFirst.Models.csproj index fab1143..c80e3ce 100644 --- a/RadGridViewEFCodeFirst.Models/RadGridViewEFCodeFirst.Models.csproj +++ b/RadGridViewEFCodeFirst.Models/RadGridViewEFCodeFirst.Models.csproj @@ -51,11 +51,10 @@ + - - Designer - + diff --git a/RadGridViewEFCodeFirst.WinFormsClient/App.config b/RadGridViewEFCodeFirst.WinFormsClient/App.config index d6d41a5..08fcdcf 100644 --- a/RadGridViewEFCodeFirst.WinFormsClient/App.config +++ b/RadGridViewEFCodeFirst.WinFormsClient/App.config @@ -14,6 +14,6 @@ - + \ No newline at end of file diff --git a/RadGridViewEFCodeFirst.WinFormsClient/Form1.cs b/RadGridViewEFCodeFirst.WinFormsClient/Form1.cs index 8fb7b3f..ffeffd5 100644 --- a/RadGridViewEFCodeFirst.WinFormsClient/Form1.cs +++ b/RadGridViewEFCodeFirst.WinFormsClient/Form1.cs @@ -1,72 +1,79 @@ -using RadGridViewEFCodeFirst.Data; -using RadGridViewEFCodeFirst.Models; -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Data.Entity.Infrastructure; -using System.Drawing; +using System; using System.Linq; -using System.Text; -using System.Threading.Tasks; using System.Windows.Forms; +using System.Data.Entity; + using Telerik.WinControls.UI; +using RadGridViewEFCodeFirst.Data; +using RadGridViewEFCodeFirst.Models; +using RadGridViewEFCodeFirst.Data.Contracts; +using RadGridViewEFCodeFirst.Data.Common; +using System.ComponentModel; +using System.Collections.Generic; + namespace RadGridViewEFCodeFirst.WinFormsClient { public partial class Form1 : Form { - private RadGridViewEFCodeFirstData data; + private IRadGridViewEFCodeFirstData data; public Form1() { InitializeComponent(); this.data = new RadGridViewEFCodeFirstData(); - //Uncomment to load data - //this.PopulateData(); + if (!data.OrderTypes.All().Any() || !data.Orders.All().Any() || !data.Shippers.All().Any()) + { + DataGenerator.PopulateData(this.data); + } + this.SetUpGrid(); + this.FormClosing += Form1_FormClosing; } - private void SetUpGrid() + private void Form1_FormClosing(object sender, FormClosingEventArgs e) { - GridViewComboBoxColumn orderTypeColumn = new GridViewComboBoxColumn(); - orderTypeColumn.Name = "OrderTypeColumn"; - orderTypeColumn.HeaderText = "OrderType"; - orderTypeColumn.DataSource = this.data.OrderTypes.All().ToList(); - orderTypeColumn.ValueMember = "Description"; - orderTypeColumn.DisplayMember = "Description"; - orderTypeColumn.FieldName = "Orders"; - orderTypeColumn.Width = 200; - this.radGridView1.Columns.Add(orderTypeColumn); + this.data.SaveChanges(); } - private void PopulateData() + private void SetUpGrid() { - for (int i = 1; i <= 100; i++) - { - OrderType orderType = new OrderType() - { - OrderTypeId = i, - Description = "Test" + i - }; + ((IDbSet)this.data.OrderTypes.All()).Load(); + this.radGridView1.DataSource = ((IDbSet)this.data.OrderTypes.All()).Local.ToBindingList(); + this.radGridView1.Columns["Orders"].IsVisible = false; + this.radGridView1.Columns["Shippers"].IsVisible = false; + this.radGridView1.AutoSizeColumnsMode = GridViewAutoSizeColumnsMode.Fill; - this.data.OrderTypes.Add(orderType); + GridViewTemplate ordersTemplate = new GridViewTemplate(); + ordersTemplate.Caption = "Orders"; + radGridView1.MasterTemplate.Templates.Add(ordersTemplate); + ((IDbSet)this.data.Orders.All()).Load(); + ordersTemplate.DataSource = ((IDbSet)this.data.Orders.All()).Local.ToBindingList(); + ordersTemplate.Columns["OrderType"].IsVisible = false; + ordersTemplate.AutoSizeColumnsMode = GridViewAutoSizeColumnsMode.Fill; - Order order = new Order() - { - OrderId = i, - Description = "Description" + i, - OrderTypeId = orderType.OrderTypeId - }; + GridViewRelation relation = new GridViewRelation(radGridView1.MasterTemplate); + relation.ChildTemplate = ordersTemplate; + relation.RelationName = "OrderTypesOrders"; + relation.ParentColumnNames.Add("OrderTypeId"); + relation.ChildColumnNames.Add("OrderTypeId"); + radGridView1.Relations.Add(relation); - this.data.Orders.Add(order); + GridViewTemplate shippersTemplate = new GridViewTemplate(); + shippersTemplate.Caption = "Shippers"; + radGridView1.MasterTemplate.Templates.Add(shippersTemplate); + ((IDbSet)this.data.Shippers.All()).Load(); + shippersTemplate.DataSource = ((IDbSet)this.data.Shippers.All()).Local.ToBindingList(); + shippersTemplate.Columns["OrderType"].IsVisible = false; + shippersTemplate.AutoSizeColumnsMode = GridViewAutoSizeColumnsMode.Fill; - if (i % 10 == 0) - { - this.data.SaveChanges(); - } - } + GridViewRelation relation2 = new GridViewRelation(radGridView1.MasterTemplate); + relation2.ChildTemplate = shippersTemplate; + relation2.RelationName = "OrderTypesShippers"; + relation2.ParentColumnNames.Add("OrderTypeId"); + relation2.ChildColumnNames.Add("OrderTypeId"); + radGridView1.Relations.Add(relation2); } } } diff --git a/RadGridViewEFCodeFirst.WinFormsClient/Program.cs b/RadGridViewEFCodeFirst.WinFormsClient/Program.cs index 00efc21..46034ab 100644 --- a/RadGridViewEFCodeFirst.WinFormsClient/Program.cs +++ b/RadGridViewEFCodeFirst.WinFormsClient/Program.cs @@ -1,7 +1,5 @@ using System; -using System.Collections.Generic; using System.Linq; -using System.Threading.Tasks; using System.Windows.Forms; namespace RadGridViewEFCodeFirst.WinFormsClient diff --git a/RadGridViewEFCodeFirst.WinFormsClient/RadGridViewEFCodeFirst.WinFormsClient.csproj b/RadGridViewEFCodeFirst.WinFormsClient/RadGridViewEFCodeFirst.WinFormsClient.csproj index 052e984..313c027 100644 --- a/RadGridViewEFCodeFirst.WinFormsClient/RadGridViewEFCodeFirst.WinFormsClient.csproj +++ b/RadGridViewEFCodeFirst.WinFormsClient/RadGridViewEFCodeFirst.WinFormsClient.csproj @@ -51,11 +51,22 @@ - - - - - + + False + D:\DLLs\Telerik_UI_For_WinForms_2015_2_728_Dev_dlls\Bin40\Telerik.WinControls.dll + + + False + D:\DLLs\Telerik_UI_For_WinForms_2015_2_728_Dev_dlls\Bin40\Telerik.WinControls.GridView.dll + + + False + D:\DLLs\Telerik_UI_For_WinForms_2015_2_728_Dev_dlls\Bin40\Telerik.WinControls.UI.dll + + + False + D:\DLLs\Telerik_UI_For_WinForms_2015_2_728_Dev_dlls\Bin40\TelerikCommon.dll +