DynamicDataContainerTableProvider.cs 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Collections.ObjectModel;
  4. using System.Linq;
  5. using System.Web;
  6. using System.Web.DynamicData;
  7. using System.Web.DynamicData.ModelProviders;
  8. using MonoTests.DataSource;
  9. namespace MonoTests.ModelProviders
  10. {
  11. public class DynamicDataContainerTableProvider <T> : TableProvider
  12. {
  13. ReadOnlyCollection<ColumnProvider> columns;
  14. DynamicDataTable table;
  15. public DynamicDataContainerTableProvider (DynamicDataContainerModelProvider <T> owner, DynamicDataTable table)
  16. : base (owner)
  17. {
  18. if (table == null)
  19. throw new ArgumentNullException ("table");
  20. this.EntityType = table.DataType;
  21. this.Name = table.Name;
  22. this.table = table;
  23. }
  24. public override ReadOnlyCollection<ColumnProvider> Columns
  25. {
  26. get
  27. {
  28. if (columns != null)
  29. return columns;
  30. columns = LoadColumns ();
  31. return columns;
  32. }
  33. }
  34. public override IQueryable GetQuery (object context)
  35. {
  36. throw new NotImplementedException ();
  37. }
  38. ReadOnlyCollection<ColumnProvider> LoadColumns ()
  39. {
  40. List<DynamicDataColumn> containerColumns = table.GetColumns ();
  41. if (containerColumns == null || containerColumns.Count == 0)
  42. return new ReadOnlyCollection<ColumnProvider> (new List<ColumnProvider> ());
  43. var columns = new List<ColumnProvider> ();
  44. foreach (var column in containerColumns)
  45. columns.Add (new DynamicDataContainerColumnProvider <T> (this, column));
  46. return new ReadOnlyCollection<ColumnProvider> (columns);
  47. }
  48. public void ResolveAssociations ()
  49. {
  50. DynamicDataContainerColumnProvider <T> column;
  51. foreach (var cp in Columns) {
  52. column = cp as DynamicDataContainerColumnProvider <T>;
  53. if (column == null)
  54. continue;
  55. column.ResolveAssociations ();
  56. }
  57. }
  58. }
  59. }