using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Web; using System.Web.DynamicData; using System.Web.DynamicData.ModelProviders; using MonoTests.DataSource; namespace MonoTests.ModelProviders { public class DynamicDataContainerTableProvider : TableProvider { ReadOnlyCollection columns; DynamicDataTable table; public DynamicDataContainerTableProvider (DynamicDataContainerModelProvider owner, DynamicDataTable table) : base (owner) { if (table == null) throw new ArgumentNullException ("table"); this.EntityType = table.DataType; this.Name = table.Name; this.table = table; } public override ReadOnlyCollection Columns { get { if (columns != null) return columns; columns = LoadColumns (); return columns; } } public override IQueryable GetQuery (object context) { throw new NotImplementedException (); } ReadOnlyCollection LoadColumns () { List containerColumns = table.GetColumns (); if (containerColumns == null || containerColumns.Count == 0) return new ReadOnlyCollection (new List ()); var columns = new List (); foreach (var column in containerColumns) columns.Add (new DynamicDataContainerColumnProvider (this, column)); return new ReadOnlyCollection (columns); } public void ResolveAssociations () { DynamicDataContainerColumnProvider column; foreach (var cp in Columns) { column = cp as DynamicDataContainerColumnProvider ; if (column == null) continue; column.ResolveAssociations (); } } } }