2009-09-18 Marek Habersack <mhabersack@novell.com>
authorMarek Habersack <grendel@twistedcode.net>
Fri, 18 Sep 2009 00:24:11 +0000 (00:24 -0000)
committerMarek Habersack <grendel@twistedcode.net>
Fri, 18 Sep 2009 00:24:11 +0000 (00:24 -0000)
* MetaTable.cs: implemented Init - calls Init on all the columns
present in this instance.

* MetaModel.cs: constructor initializes FieldTemplateFactory after
it is instantiated.
RegisterContextCore first registers the context type, then creates
tables and finally calls Init on all the tables.

* MetaColumn.cs: added internal Init method - called by MetaModel
after context is registered and all tables are created and
registered.

* MetaChildrenColumn.cs: implemented ChildTable,
ColumnInOtherTable, GetChildrenListPath, GetChildrenPath and added
an internal Init method override. MonoTODO attributes stay until I
write tests for the class.

* FieldTemplateUserControl.cs: implemented ChildrenColumn,
ChildrenPath, Column, ForeignKeyColumn, ForeignKeyPath,
MetadataAttributes, Mode, Row, Table, SetHost

* FieldTemplateFactory.cs: GetFieldTemplateVirtualPath fixes

* DynamicControl.cs: implemented ApplyFormatInEditMode,
ConvertEmptyStringToNull, DataField, DataFormatString, HtmlEncode,
FormattingOptions, NullDisplayText, UIHint, OnInit, Render.

2009-09-18  Marek Habersack  <mhabersack@novell.com>

* TestsBasePage.cs: added an event ItemDataBinding, invoked
whenever an item is data bound.

2009-09-18  Marek Habersack  <mhabersack@novell.com>

* Makefile (TEST_RESOURCE_FILES): added
Test/WebPages/ListView_DynamicControl_10.aspx,
Test/WebPages/ListView_DynamicControl_10.aspx.cs

2009-09-18  Marek Habersack  <mhabersack@novell.com>

* DynamicControlTest.cs: FieldTemplate_1 - fixed fake edit
postback for Mono.

svn path=/trunk/mcs/; revision=142161

21 files changed:
mcs/class/System.Web.DynamicData/ChangeLog
mcs/class/System.Web.DynamicData/Makefile
mcs/class/System.Web.DynamicData/System.Web.DynamicData/ChangeLog
mcs/class/System.Web.DynamicData/System.Web.DynamicData/DynamicControl.cs
mcs/class/System.Web.DynamicData/System.Web.DynamicData/DynamicDataRoute.cs
mcs/class/System.Web.DynamicData/System.Web.DynamicData/FieldTemplateFactory.cs
mcs/class/System.Web.DynamicData/System.Web.DynamicData/FieldTemplateUserControl.cs
mcs/class/System.Web.DynamicData/System.Web.DynamicData/MetaChildrenColumn.cs
mcs/class/System.Web.DynamicData/System.Web.DynamicData/MetaColumn.cs
mcs/class/System.Web.DynamicData/System.Web.DynamicData/MetaModel.cs
mcs/class/System.Web.DynamicData/System.Web.DynamicData/MetaTable.cs
mcs/class/System.Web.DynamicData/Test/Common/ChangeLog
mcs/class/System.Web.DynamicData/Test/Common/TestsBasePage.cs
mcs/class/System.Web.DynamicData/Test/System.Web.DynamicData/ChangeLog
mcs/class/System.Web.DynamicData/Test/System.Web.DynamicData/DynamicControlTest.cs
mcs/class/System.Web.DynamicData/Test/System.Web.DynamicData/FieldTemplateFactoryTest.cs
mcs/class/System.Web.DynamicData/Test/System.Web.DynamicData/FieldTemplateUserControlTest.cs
mcs/class/System.Web.DynamicData/Test/System.Web.DynamicData/MetaTableTest.cs
mcs/class/System.Web.DynamicData/Test/WebPages/DynamicData/FieldTemplates/Children.ascx.cs
mcs/class/System.Web.DynamicData/Test/WebPages/ListView_DynamicControl_10.aspx [new file with mode: 0644]
mcs/class/System.Web.DynamicData/Test/WebPages/ListView_DynamicControl_10.aspx.cs [new file with mode: 0644]

index 0d08502bc18f0171c65ecbcd9ab7ba42021b6ced..a73a06874094eae72d226c598025ecaf85be678d 100644 (file)
@@ -1,3 +1,9 @@
+2009-09-18  Marek Habersack  <mhabersack@novell.com>
+
+       * Makefile (TEST_RESOURCE_FILES): added
+       Test/WebPages/ListView_DynamicControl_10.aspx,
+       Test/WebPages/ListView_DynamicControl_10.aspx.cs
+
 2009-09-15  Marek Habersack  <mhabersack@novell.com>
 
        * Makefile (TEST_RESOURCE_FILES): added
index 39211196d939e4b176df4aec14630a9bce3c8e5f..0ecb9566017eb1995b86553a243c8605b5680c8e 100644 (file)
@@ -157,6 +157,8 @@ TEST_RESOURCE_FILES = \
        Test/WebPages/ListView_DynamicControl_08.aspx.cs,MonoTests.WebPages.ListView_DynamicControl_08.aspx.cs  \
        Test/WebPages/ListView_DynamicControl_09.aspx,MonoTests.WebPages.ListView_DynamicControl_09.aspx        \
        Test/WebPages/ListView_DynamicControl_09.aspx.cs,MonoTests.WebPages.ListView_DynamicControl_09.aspx.cs  \
+       Test/WebPages/ListView_DynamicControl_10.aspx,MonoTests.WebPages.ListView_DynamicControl_10.aspx        \
+       Test/WebPages/ListView_DynamicControl_10.aspx.cs,MonoTests.WebPages.ListView_DynamicControl_10.aspx.cs  \
        Test/WebPages/Site.css,MonoTests.WebPages.Site.css      \
        Test/WebPages/Site.master,MonoTests.WebPages.Site.master        \
        Test/WebPages/Site.master.cs,MonoTests.WebPages.Site.master.cs  \
index c21f40c136743e0e55747db65d32bfd277aea188..ec8aa660041d2db958e5dfa893da19a1dcbc0dff 100644 (file)
@@ -1,3 +1,32 @@
+2009-09-18  Marek Habersack  <mhabersack@novell.com>
+
+       * MetaTable.cs: implemented Init - calls Init on all the columns
+       present in this instance.
+
+       * MetaModel.cs: constructor initializes FieldTemplateFactory after
+       it is instantiated.
+       RegisterContextCore first registers the context type, then creates
+       tables and finally calls Init on all the tables.
+
+       * MetaColumn.cs: added internal Init method - called by MetaModel
+       after context is registered and all tables are created and
+       registered.
+
+       * MetaChildrenColumn.cs: implemented ChildTable,
+       ColumnInOtherTable, GetChildrenListPath, GetChildrenPath and added
+       an internal Init method override. MonoTODO attributes stay until I
+       write tests for the class.
+
+       * FieldTemplateUserControl.cs: implemented ChildrenColumn,
+       ChildrenPath, Column, ForeignKeyColumn, ForeignKeyPath,
+       MetadataAttributes, Mode, Row, Table, SetHost
+
+       * FieldTemplateFactory.cs: GetFieldTemplateVirtualPath fixes
+
+       * DynamicControl.cs: implemented ApplyFormatInEditMode,
+       ConvertEmptyStringToNull, DataField, DataFormatString, HtmlEncode,
+       FormattingOptions, NullDisplayText, UIHint, OnInit, Render.
+
 2009-09-15  Marek Habersack  <mhabersack@novell.com>
 
        * MetaColumn.cs: DataTypeAttribtue created automatically for
index b69b49b8b4141dcbb5f9221f16e621f8440ba5f9..7c258fc4ee002c6fe184283cb2a98f7da2c30d18 100644 (file)
@@ -50,6 +50,13 @@ namespace System.Web.DynamicData
        public class DynamicControl : Control, IAttributeAccessor, IFieldTemplateHost, IFieldFormattingOptions
        {
                Dictionary <string, string> attributes;
+               bool? applyFormatInEditMode;
+               bool? convertEmptyStringToNull;
+               bool? htmlEncode;
+               string dataField = String.Empty;
+               string dataFormatString;
+               string nullDisplayText;
+               string uiHint;
                
                public DynamicControl () : this (DataBoundControlMode.ReadOnly)
                {
@@ -58,19 +65,42 @@ namespace System.Web.DynamicData
                public DynamicControl (DataBoundControlMode mode)
                {
                        Mode = mode;
-                       UIHint = String.Empty;
+                       CssClass = String.Empty;
+                       ValidationGroup = String.Empty;
                }
 
                [Category ("Behavior")]
                [DefaultValue (false)]
-               public bool ApplyFormatInEditMode { get; set; }
+               public bool ApplyFormatInEditMode {
+                       get {
+                               if (applyFormatInEditMode == null) {
+                                       MetaColumn column = Column;
+                                       applyFormatInEditMode = column != null ? column.ApplyFormatInEditMode : false;
+                               }
+                               
+                               return (bool)applyFormatInEditMode;
+                       }
+                       
+                       set { applyFormatInEditMode = value; }
+               }
 
                [Browsable (false)]
                public MetaColumn Column { get; set; }
 
                [Category ("Behavior")]
                [DefaultValue (false)]
-               public bool ConvertEmptyStringToNull { get; set; }
+               public bool ConvertEmptyStringToNull {
+                       get {
+                               if (convertEmptyStringToNull == null) {
+                                       MetaColumn column = Column;
+                                       convertEmptyStringToNull = column != null ? column.ConvertEmptyStringToNull : false;
+                               }
+
+                               return (bool)convertEmptyStringToNull;
+                       }
+                       
+                       set { convertEmptyStringToNull = value; }
+               }
 
                [MonoTODO]
                [Category ("Appearance")]
@@ -80,34 +110,77 @@ namespace System.Web.DynamicData
 
                [Category ("Data")]
                [DefaultValue ("")]
-               public string DataField { get; set; }
+               public string DataField {
+                       get { return dataField; }
+                       
+                       set { dataField = value == null ? String.Empty : value; }
+               }
 
-               [MonoTODO]
                [Category ("Data")]
                [DefaultValue ("")]
-               public string DataFormatString { get; set; }
+               public string DataFormatString {
+                       get {
+                               if (dataFormatString == null) {
+                                       MetaColumn column = Column;
+                                       if (column != null) {
+                                               dataFormatString = column.DataFormatString;
+                                               if (dataFormatString == null)
+                                                       dataFormatString = String.Empty;
+                                       } else
+                                               dataFormatString = String.Empty;
+                               }
+
+                               return dataFormatString;
+                       }
+                       
+                       set { dataFormatString = value == null ? String.Empty : value; }
+               }
 
                [MonoTODO]
                [Browsable (false)]
                public Control FieldTemplate { get; private set; }
 
-               [MonoTODO]
                [Category ("Behavior")]
                [DefaultValue (true)]
-               public bool HtmlEncode { get; set; }
+               public bool HtmlEncode {
+                       get {
+                               if (htmlEncode == null) {
+                                       MetaColumn column = Column;
+                                       htmlEncode = column != null ? column.HtmlEncode : true;
+                               }
+
+                               return (bool)htmlEncode;
+                       }
+                       
+                       set { htmlEncode = value; }
+               }
 
-               [MonoTODO]
                IFieldFormattingOptions IFieldTemplateHost.FormattingOptions {
-                       get { throw new NotImplementedException (); }
+                       get { return this; }
                }
 
                [MonoTODO]
                public DataBoundControlMode Mode { get; set; }
 
-               [MonoTODO]
                [Category ("Behavior")]
                [DefaultValue ("")]
-               public string NullDisplayText { get; set; }
+               public string NullDisplayText {
+                       get {
+                               if (nullDisplayText == null) {
+                                       MetaColumn column = Column;
+                                       if (column != null) {
+                                               nullDisplayText = column.NullDisplayText;
+                                               if (nullDisplayText == null)
+                                                       nullDisplayText = String.Empty;
+                                       } else
+                                               nullDisplayText = String.Empty;
+                               }
+
+                               return nullDisplayText;
+                       }
+                       
+                       set { nullDisplayText = value == null ? String.Empty : value; }
+               }
                
                [Browsable (false)]
                public virtual MetaTable Table {
@@ -116,41 +189,95 @@ namespace System.Web.DynamicData
 
                [Category ("Behavior")]
                [DefaultValue ("")]
-               public virtual string UIHint { get; set; }
+               public virtual string UIHint {
+                       get {
+                               if (uiHint == null) {
+                                       MetaColumn column = Column;
+                                       uiHint = column != null ? column.UIHint : String.Empty;
+                                       if (uiHint == null)
+                                               uiHint = String.Empty;
+                               }
+
+                               return uiHint;
+                       }
+                       
+                       set { uiHint = value != null ? value : String.Empty; }
+                       
+               }
 
-               [MonoTODO]
                [Themeable (false)]
                [Category ("Behavior")]
                [DefaultValue ("")]
                public virtual string ValidationGroup { get; set; }
+
+               void CreateFieldTemplate ()
+               {
+                       MetaColumn column = Column;
+                               
+                       // Safe as ResolveColumn won't return with a null Column
+                       MetaModel model = column.Model;
+                       IFieldTemplateFactory ftf = model != null ? model.FieldTemplateFactory : null;
+                       IFieldTemplate ft;
+                       
+                       if (ftf != null) {
+                               ft = ftf.CreateFieldTemplate (column, Mode, UIHint);
+                               if (ft == null)
+                                       return;
+                       } else
+                               return;
+                       
+                       ft.SetHost (this);
+
+                       Control ctl = ft as Control;
+                       if (ctl == null)
+                               return;
+                       
+                       FieldTemplate = ctl;
+                       Controls.Add (ctl);
+               }
                
                public string GetAttribute (string key)
                {
                        if (attributes == null)
-                               return null;
+                               return String.Empty;
 
                        string ret;
                        if (attributes.TryGetValue (key, out ret))
                                return ret;
-
-                       return null;
+                       else
+                               // "Compatibility"...
+                               throw new KeyNotFoundException ("NoSuchAttribute");
                }
 
-               [MonoTODO]
                protected override void OnInit (EventArgs e)
                {
                        // It seems _all_ the properties are initialized _only_ here. Further user's
                        // actions to set the Column property don't affect the other properties
                        // which derive their values from the associated MetaColumn.
                        base.OnInit (e);
-                       if (Column == null)
+                       if (Column == null) {
                                ResolveColumn ();
+                               Controls.Clear ();
+                               CreateFieldTemplate ();
+                       }
                }
 
                protected override void Render (HtmlTextWriter writer)
                {
+                       string cssClass = CssClass;
+                       bool haveCssClass = !String.IsNullOrEmpty (cssClass);
+                       
+                       if (haveCssClass) {
+                               writer.AddAttribute (HtmlTextWriterAttribute.Class, cssClass);
+                               writer.RenderBeginTag (HtmlTextWriterTag.Span);
+                               writer.Write ("\n\n");
+                       }
+                       
                        base.Render (writer);
-                       // Why override?
+
+                       if (haveCssClass) {
+                               writer.RenderEndTag ();
+                       }
                }
 
                void ResolveColumn ()
index d73ca5e07f00022133c34456ae7838c53d9ab0b8..bfb94e84bad0e6358e798c14853ad51b8cd5ba91 100644 (file)
@@ -143,7 +143,7 @@ namespace System.Web.DynamicData
                        var t = routeData.GetRequiredString ("Table");
                        if (Model == null)
                                throw new InvalidOperationException ("MetaModel must be set to the DynamicDataRoute before retrieving MetaTable");
-                       MetaTable mt;
+
                        return Model.GetTable (t);
                }
 
index 2d913bd09bfab083670e11b3211afcc9d2f6bc60..abff575054dc79a9bfca2a76917f917577755dbf 100644 (file)
@@ -126,7 +126,11 @@ namespace System.Web.DynamicData
                {
                        // NO checks are made on parameters in .NET, but well "handle" the NREX
                        // throws in the other methods
-                       return BuildManager.CreateInstanceFromVirtualPath (GetFieldTemplateVirtualPath (column, mode, uiHint), typeof (IFieldTemplate)) as IFieldTemplate;
+                       string virtualPath = GetFieldTemplateVirtualPath (column, mode, uiHint);
+                       if (String.IsNullOrEmpty (virtualPath))
+                               return null;
+                       
+                       return BuildManager.CreateInstanceFromVirtualPath (virtualPath, typeof (IFieldTemplate)) as IFieldTemplate;
                }
 
                public virtual string GetFieldTemplateVirtualPath (MetaColumn column, DataBoundControlMode mode, string uiHint)
@@ -134,7 +138,6 @@ namespace System.Web.DynamicData
                        // NO checks are made on parameters in .NET, but well "handle" the NREX
                        // throws in the other methods
                        DataBoundControlMode newMode = PreprocessMode (column, mode);
-                       string templatePath;
 
                        // The algorithm is as follows:
                        //
@@ -161,50 +164,42 @@ namespace System.Web.DynamicData
 
                        DataTypeAttribute attr = column.DataTypeAttribute;
                        bool uiHintPresent = !String.IsNullOrEmpty (uiHint);
-                       if (uiHintPresent && uiHint.EndsWith (".ascx", StringComparison.OrdinalIgnoreCase)) {
-                               uiHint = uiHint.Substring (0, uiHint.Length - 5);
-                               if (uiHint.Length == 0)
-                                       uiHintPresent = false;
-                       }
-                       
-                       templatePath = null;
-                       int step = 1;
+                       string templatePath = null;
+                       int step = uiHintPresent ? 0 : 1;
                        Type columnType = column.ColumnType;
 
-                       if (uiHintPresent)
-                               step = 0;
-                       else if (attr == null && templatePath == null) {
+                       if (!uiHintPresent && attr == null) {
                                if (column is MetaChildrenColumn)
-                                       templatePath = GetExistingTemplateVirtualPath ("Children", column, mode);
+                                       templatePath = GetExistingTemplateVirtualPath ("Children", column, newMode);
                                else if (column is MetaForeignKeyColumn)
-                                       templatePath = GetExistingTemplateVirtualPath ("ForeignKey", column, mode);
+                                       templatePath = GetExistingTemplateVirtualPath ("ForeignKey", column, newMode);
                        }
-                               
+                       
                        while (step < 6 && templatePath == null) {
                                switch (step) {
                                        case 0:
-                                               templatePath = GetExistingTemplateVirtualPath (uiHint, column, mode);
+                                               templatePath = GetExistingTemplateVirtualPath (uiHint, column, newMode);
                                                break;
 
                                        case 1:
                                                if (attr != null)
-                                                       templatePath = GetTemplateForDataType (attr.DataType, attr.GetDataTypeName (), uiHint, column, mode);
+                                                       templatePath = GetTemplateForDataType (attr.DataType, attr.GetDataTypeName (), uiHint, column, newMode);
                                                break;
                                                        
                                        case 2:
-                                               templatePath = GetExistingTemplateVirtualPath (columnType.FullName, column, mode);
+                                               templatePath = GetExistingTemplateVirtualPath (columnType.FullName, column, newMode);
                                                break;
 
                                        case 3:
-                                               templatePath = GetExistingTemplateVirtualPath (columnType.Name, column, mode);
+                                               templatePath = GetExistingTemplateVirtualPath (columnType.Name, column, newMode);
                                                break;
 
                                        case 4:
-                                               templatePath = ColumnTypeToSpecialName (columnType, column, mode);
+                                               templatePath = ColumnTypeToSpecialName (columnType, column, newMode);
                                                break;
 
                                        case 5:
-                                               columnType = GetFallbackType (columnType, column, mode);
+                                               columnType = GetFallbackType (columnType, column, newMode);
                                                if (columnType == null)
                                                        step = 5;
                                                else
@@ -256,15 +251,7 @@ namespace System.Web.DynamicData
                {
                        switch (dataType) {
                                case DataType.Custom:
-                                       string ret;
-                                       if (!String.IsNullOrEmpty (uiHint))
-                                               ret = GetExistingTemplateVirtualPath (uiHint, column, mode);
-                                       else
-                                               ret = null;
-
-                                       if (ret == null)
-                                               ret = GetExistingTemplateVirtualPath (customDataType, column, mode);
-                                       return ret;
+                                       return GetExistingTemplateVirtualPath (customDataType, column, mode);
 
                                case DataType.DateTime:
                                        return GetExistingTemplateVirtualPath ("DateTime", column, mode);
index a4b52bd8b7fa56aca76762f878003aa2e6330333..e8fea2305dfac506407a9cc00823392a12f2a939 100644 (file)
@@ -3,8 +3,9 @@
 //
 // Author:
 //     Atsushi Enomoto <atsushi@ximian.com>
+//     Marek Habersack <mhabersack@novell.com>
 //
-// Copyright (C) 2008 Novell Inc. http://novell.com
+// Copyright (C) 2008-2009 Novell Inc. http://novell.com
 //
 
 //
@@ -44,12 +45,35 @@ namespace System.Web.DynamicData
        [AspNetHostingPermission (SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)]
        public class FieldTemplateUserControl : UserControl, IBindableControl, IFieldTemplate
        {
-               [MonoTODO]
-               public MetaChildrenColumn ChildrenColumn { get; private set; }
-               [MonoTODO]
-               protected string ChildrenPath { get; private set; }
-               [MonoTODO]
-               public MetaColumn Column { get; private set; }
+               public MetaChildrenColumn ChildrenColumn {
+                       get {
+                               MetaColumn column = Column;
+                               var ret = column as MetaChildrenColumn;
+                               if (ret == null) {
+                                       string name = column == null ? null : column.Name;
+                                       throw new Exception ("'" + name + "' is not a children column and cannot be used here.");
+                               }
+                               
+                               return ret;
+                       }
+               }               
+
+               [MonoTODO]
+               protected string ChildrenPath {
+                       get { return ChildrenColumn.GetChildrenListPath (Row); }
+                       
+               }
+
+               public MetaColumn Column {
+                       get {
+                               IFieldTemplateHost host = Host;
+                               if (host != null)
+                                       return host.Column;
+
+                               return null;
+                       }
+               }
+               
                [MonoTODO]
                public virtual Control DataControl { get; private set; }
                [MonoTODO]
@@ -58,22 +82,65 @@ namespace System.Web.DynamicData
                public virtual string FieldValueEditString { get; private set; }
                [MonoTODO]
                public virtual string FieldValueString { get; private set; }
+
                [MonoTODO]
-               public MetaForeignKeyColumn ForeignKeyColumn { get; private set; }
+               public MetaForeignKeyColumn ForeignKeyColumn {
+                       get {
+                               MetaColumn column = Column;
+                               var ret = column as MetaForeignKeyColumn;
+                               if (ret == null) {
+                                       string name = column == null ? null : column.Name;
+                                       throw new Exception ("'" + name + "' is not a foreign key column and cannot be used here.");
+                               }
+                               
+                               return ret;
+                       }
+               }
+               
                [MonoTODO]
-               protected string ForeignKeyPath { get; private set; }
+               protected string ForeignKeyPath {
+                       get { return ForeignKeyColumn.GetForeignKeyDetailsPath (Row); }
+               }
+               
                [MonoTODO]
                public IFieldFormattingOptions FormattingOptions { get; private set; }
-               [MonoTODO]
+
                public IFieldTemplateHost Host { get; private set; }
+
                [MonoTODO]
-               public System.ComponentModel.AttributeCollection MetadataAttributes { get; private set; }
+               public System.ComponentModel.AttributeCollection MetadataAttributes {
+                       get {
+                               MetaColumn column = Column;
+                               if (column == null)
+                                       return null;
+
+                               return column.Attributes;
+                       }
+               }
+               
                [MonoTODO]
-               public DataBoundControlMode Mode { get; private set; }
+               public DataBoundControlMode Mode {
+                       get {
+                               IFieldTemplateHost host = Host;                 
+                               return host == null ? DataBoundControlMode.ReadOnly : host.Mode;
+                       }
+               }
+               
                [MonoTODO]
-               public virtual object Row { get; private set; }
+               public virtual object Row {
+                       get {
+                               Page page = Page;
+                               return page == null ? null : page.GetDataItem ();
+                       }
+               }
+               
                [MonoTODO]
-               public MetaTable Table { get; private set; }
+               public MetaTable Table {
+                       get {
+                               MetaColumn column = Column;
+                               return column == null ? null : column.Table;
+                       }
+               }
 
                [MonoTODO]
                protected string BuildChildrenPath (string path)
@@ -129,10 +196,9 @@ namespace System.Web.DynamicData
                        ExtractValues (dictionary);
                }
 
-               [MonoTODO]
                void IFieldTemplate.SetHost (IFieldTemplateHost host)
                {
-                       throw new NotImplementedException ();
+                       Host = host;
                }
 
                [MonoTODO]
index 9afd442f15abe2b4ece19cb397216d82fc14ca04..7700861bcaf51705f78ff1d7b3efcaf4497f84a2 100644 (file)
@@ -3,8 +3,9 @@
 //
 // Author:
 //     Atsushi Enomoto <atsushi@ximian.com>
+//      Marek Habersack <mhabersack@novell.com>
 //
-// Copyright (C) 2008 Novell Inc. http://novell.com
+// Copyright (C) 2008-2009 Novell Inc. http://novell.com
 //
 
 //
@@ -46,6 +47,8 @@ namespace System.Web.DynamicData
                internal MetaChildrenColumn (MetaTable table, ColumnProvider provider)
                        : base (table, provider)
                {
+                       if (table == null)
+                               throw new ArgumentNullException ("table");
                }
 
                [MonoTODO]
@@ -56,19 +59,30 @@ namespace System.Web.DynamicData
                [MonoTODO]
                public string GetChildrenListPath (object row)
                {
-                       throw new NotImplementedException ();
+                       return ChildTable.GetActionPath (PageAction.List, row);
                }
 
                [MonoTODO]
                public string GetChildrenPath (string action, object row)
                {
-                       throw new NotImplementedException ();
+                       return ChildTable.GetActionPath (action, row);
                }
 
                [MonoTODO]
                public string GetChildrenPath (string action, object row, string path)
                {
-                       throw new NotImplementedException ();
+                       return ChildTable.GetActionPath (action, row, path);
+               }
+
+               internal override void Init ()
+               {
+                       AssociationProvider association = Provider.Association;
+                       ColumnProvider otherColumn = association.ToColumn;
+                       string otherColumnName = otherColumn == null ? null : otherColumn.Name;
+                       MetaTable childTable = Model.GetTable (association.ToTable.Name, Table.DataContextType);
+                       ChildTable = childTable;
+                       if (childTable != null && !String.IsNullOrEmpty (otherColumnName))
+                               ColumnInOtherTable = childTable.GetColumn (otherColumnName);
                }
        }
 }
index d81866bba05a4fa457b27f441c98d06be2fd6d72..e59d8c58a5b3eeb92a057671edc34620317f979c 100644 (file)
@@ -62,7 +62,6 @@ namespace System.Web.DynamicData
                bool uiHintReflected;
                
                string dataFormatString;
-               PropertyDescriptor property;
                object defaultValue;
                string description;
                string displayName;
@@ -496,6 +495,10 @@ namespace System.Web.DynamicData
                        
                        return displayFormatAttr;
                }
+
+               internal virtual void Init ()
+               {
+               }
                
                AttributeCollection LoadAttributes ()
                {
index f3a4a709dc9da07673d9230ab2b38c8aa98f72c5..0eceb9847202eb5f4e72cd9e90d5b1cbf6281bdb 100644 (file)
@@ -54,7 +54,6 @@ namespace System.Web.DynamicData
                static Exception registration_exception;
                static Dictionary<Type, MetaModel> registered_models;
 
-               DataModelProvider provider;
                string dynamicDataFolderVirtualPath;
                
                public static MetaModel Default {
@@ -84,7 +83,10 @@ namespace System.Web.DynamicData
                        if (default_model == null)
                                default_model = this;
 
-                       FieldTemplateFactory = new FieldTemplateFactory ();
+                       FieldTemplateFactory ftf = new FieldTemplateFactory ();
+                       ftf.Initialize (this);
+                       FieldTemplateFactory = ftf;
+                       
                        Tables = new ReadOnlyCollection<MetaTable> (new MetaTable [0]);
                        VisibleTables = new List<MetaTable> ();
                }
@@ -227,13 +229,18 @@ namespace System.Web.DynamicData
 
                void RegisterContextCore (DataModelProvider dataModelProvider, ContextConfiguration configuration)
                {
+                       RegisterModel (dataModelProvider.ContextType, this, configuration);
+                       
                        var l = new List<MetaTable> (Tables);
                        foreach (var t in dataModelProvider.Tables)
                                l.Add (new MetaTable (this, t, configuration));
                        
                        Tables = new ReadOnlyCollection<MetaTable> (l);
+
+                       foreach (MetaTable t in l)
+                               t.Init ();
+                       
                        VisibleTables = l;
-                       RegisterModel (dataModelProvider.ContextType, this, configuration);
                }
 
                static void RegisterModel (Type contextType, MetaModel model, ContextConfiguration configuration)
index 0acb5f5554b00ba6b51abc7e628b11aec8307776..0e513731d5ec5022e47129a63e24a662999a214c 100644 (file)
@@ -84,6 +84,7 @@ namespace System.Web.DynamicData
                        ScaffoldTableAttribute attr = null;
                        MetaModel.GetDataFieldAttribute <ScaffoldTableAttribute> (Attributes, ref attr);
                        Scaffold = attr != null ? attr.Scaffold : scaffoldAllTables;
+                       DataContextType = provider.DataModel.ContextType;
                        
                        var columns = new List <MetaColumn> ();
                        var primaryKeyColumns = new List <MetaColumn> ();
@@ -125,7 +126,6 @@ namespace System.Web.DynamicData
                        else
                                ForeignKeyColumnsNames = String.Join (",", foreignKeyColumnNames.ToArray ());
                        
-                       DataContextType = provider.DataModel.ContextType;
                        HasPrimaryKey = primaryKeyColumns.Count > 0;
 
                        // See http://forums.asp.net/t/1388561.aspx
@@ -564,6 +564,16 @@ namespace System.Web.DynamicData
                        return Provider.GetQuery (context == null ? CreateContext () : context);
                }
 
+               internal void Init ()
+               {
+                       ReadOnlyCollection <MetaColumn> columns = Columns;
+                       if (columns == null)
+                               return;
+
+                       foreach (MetaColumn mc in columns)
+                               mc.Init ();
+               }
+               
                public override string ToString ()
                {
                        return Name;
index 89acaf8087437065273af3acaf95f76bb16c1051..ff5227d54d2226238c44226092f09661186b0b92 100644 (file)
@@ -1,3 +1,8 @@
+2009-09-18  Marek Habersack  <mhabersack@novell.com>
+
+       * TestsBasePage.cs: added an event ItemDataBinding, invoked
+       whenever an item is data bound.
+
 2009-07-14  Marek Habersack  <mhabersack@novell.com>
 
        * AssertExtensions.cs: include full exception trace in the Fail
index 1a26a916c524622fbd2d623a30b25b09c13cb824..318c0486be4c93e2f329e18ad3febd218d91808f 100644 (file)
@@ -10,13 +10,17 @@ using MonoTests.DataSource;
 
 namespace MonoTests.Common
 {
-       public class TestsBasePage <DataContextType> : global::System.Web.UI.Page where DataContextType: new()
+       public class TestsBasePage<DataContextType> : global::System.Web.UI.Page where DataContextType : new ()
        {
                Type containerType;
                bool? outsideTestSuite;
 
-               public bool OutsideTestSuite {
-                       get {
+               public event EventHandler ItemDataBinding;
+
+               public bool OutsideTestSuite
+               {
+                       get
+                       {
                                if (outsideTestSuite == null) {
                                        object o = WebConfigurationManager.AppSettings["OutsideTestSuite"];
                                        string s = o as string;
@@ -29,20 +33,24 @@ namespace MonoTests.Common
                                                outsideTestSuite = false;
                                }
 
-                               return (bool) outsideTestSuite;
+                               return (bool)outsideTestSuite;
                        }
 
-                       set {
+                       set
+                       {
                                outsideTestSuite = value;
                        }
                }
 
-               public virtual Type ContextType {
+               public virtual Type ContextType
+               {
                        get { return typeof (DataContextType); }
                }
 
-               public virtual Type ContainerType {
-                       get {
+               public virtual Type ContainerType
+               {
+                       get
+                       {
                                if (containerType == null) {
                                        Type genType = typeof (TestDataContainer<>).GetGenericTypeDefinition ();
                                        containerType = genType.MakeGenericType (new Type[] { ContextType });
@@ -52,13 +60,14 @@ namespace MonoTests.Common
                        }
                }
 
-               public virtual string ContainerTypeName {
+               public virtual string ContainerTypeName
+               {
                        get { return ContainerType.AssemblyQualifiedName; }
                }
 
-               protected virtual IDynamicDataContainer <DataContextType> CreateContainerInstance ()
+               protected virtual IDynamicDataContainer<DataContextType> CreateContainerInstance ()
                {
-                       return Activator.CreateInstance (ContainerType) as IDynamicDataContainer <DataContextType>;
+                       return Activator.CreateInstance (ContainerType) as IDynamicDataContainer<DataContextType>;
                }
 
                protected virtual void InitializeDataSource (DynamicDataSource ds, string tableName)
@@ -83,5 +92,12 @@ namespace MonoTests.Common
                                        t.Invoke (this);
                        }
                }
+
+               public void Item_DataBinding (object sender, EventArgs args)
+               {
+                       EventHandler eh = ItemDataBinding;
+                       if (eh != null)
+                               eh (sender, args);
+               }
        }
 }
index 0e1f3b5d68a962c06900e0382570015755aed621..27cdde53cc94463e434503def6100b69e5882871 100644 (file)
@@ -1,3 +1,8 @@
+2009-09-18  Marek Habersack  <mhabersack@novell.com>
+
+       * DynamicControlTest.cs: FieldTemplate_1 - fixed fake edit
+       postback for Mono.
+
 2009-09-15  Marek Habersack  <mhabersack@novell.com>
 
        * FieldTemplateFactoryTest.cs: implemented tests for
index dc216f65c12e1f5375e20124dd0ce360d44856be..cbd6a10a5331af005b1c8f7125f438a3818a7015 100644 (file)
@@ -502,8 +502,13 @@ namespace MonoTests.System.Web.DynamicData
                        delegates.PreRenderComplete = FieldTemplate_OnPreRenderComplete_1;
                        test.Invoker = new PageInvoker (delegates);
                        var fr = new FormRequest (test.Response, "form1");
+#if TARGET_DOTNET
                        fr.Controls.Add ("ListView4$ctrl0$editMe");
                        fr.Controls["ListView4$ctrl0$editMe"].Value = "Edit";
+#else
+                       fr.Controls.Add ("ListView4$ctl01$editMe");
+                       fr.Controls["ListView4$ctl01$editMe"].Value = "Edit";
+#endif
                        test.Request = fr;
                        p = test.Run ();
 
@@ -851,6 +856,9 @@ namespace MonoTests.System.Web.DynamicData
                        Assert.AreEqual ("CustomFieldTemplate", dc.UIHint, "#D1-2");
                        dc.UIHint = "MyCustomUIHintTemplate_Text";
                        Assert.AreEqual ("MyCustomUIHintTemplate_Text", dc.UIHint, "#D1-3");
+
+                       dc.UIHint = null;
+                       Assert.AreEqual (String.Empty, dc.UIHint, "#E1");
                }
 
                [Test]
index 78b1974bbf06027c88b330ab5a3738e5b59d5317..4304e0a7f9e79c465f4b46ff1c173f337ac8d260 100644 (file)
@@ -184,6 +184,9 @@ namespace MonoTests.System.Web.DynamicData
                                ftf.CreateFieldTemplate (null, DataBoundControlMode.ReadOnly, "Integer.ascx");
                        }, "#A1");
 
+#if TARGET_DOTNET
+                       // Not going to emulate those on Mono. There are limits...
+
                        // ...and again
                        AssertExtensions.Throws<NullReferenceException> (() => {
                                ftf.CreateFieldTemplate (mc, DataBoundControlMode.ReadOnly, null);
@@ -198,6 +201,7 @@ namespace MonoTests.System.Web.DynamicData
                        AssertExtensions.Throws<NullReferenceException> (() => {
                                ftf.CreateFieldTemplate (mc, DataBoundControlMode.ReadOnly, "NoSuchTemplate");
                        }, "#A4");
+#endif
                }
 
                [Test]
@@ -281,6 +285,7 @@ namespace MonoTests.System.Web.DynamicData
                                ftf.GetFieldTemplateVirtualPath (null, DataBoundControlMode.ReadOnly, "Integer.ascx");
                        }, "#A1");
 
+#if TARGET_DOTNET
                        // ...and again
                        AssertExtensions.Throws<NullReferenceException> (() => {
                                ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null);
@@ -295,6 +300,7 @@ namespace MonoTests.System.Web.DynamicData
                        AssertExtensions.Throws<NullReferenceException> (() => {
                                ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "NoSuchTemplate");
                        }, "#A4");
+#endif
                }
 
                [Test]
@@ -676,6 +682,7 @@ namespace MonoTests.System.Web.DynamicData
                        Assert.AreEqual (ftf.TemplateFolderVirtualPath + "DateTime.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null), "#B1");
                        Assert.AreEqual (ftf.TemplateFolderVirtualPath + "DateTime.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty), "#B1-1");
                        Assert.AreEqual (ftf.TemplateFolderVirtualPath + "DateTime.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean.ascx"), "#B1-2");
+                       Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#B1-3");
 
                        mc = t.GetColumn ("DateTimeColumn2");
                        Assert.IsNotNull (mc.UIHint, "#B2");
@@ -683,12 +690,14 @@ namespace MonoTests.System.Web.DynamicData
                        Assert.AreEqual (ftf.TemplateFolderVirtualPath + "DateTime.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null), "#B2-3");
                        Assert.AreEqual (ftf.TemplateFolderVirtualPath + "DateTime.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty), "#B2-4");
                        Assert.AreEqual (ftf.TemplateFolderVirtualPath + "DateTime.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean.ascx"), "#B2-5");
+                       Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#B2-6");
 
                        // Date -> maps to Text.ascx, regardless of underlying type and uiHint passed
                        mc = t.GetColumn ("DateColumn1");
                        Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null), "#C1");
                        Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty), "#C1-1");
                        Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean.ascx"), "#C1-2");
+                       Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#C1-3");
 
                        mc = t.GetColumn ("DateColumn2");
                        Assert.IsNotNull (mc.UIHint, "#C2");
@@ -696,11 +705,13 @@ namespace MonoTests.System.Web.DynamicData
                        Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null), "#C2-3");
                        Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty), "#C2-4");
                        Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean.ascx"), "#C2-5");
+                       Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#C2-6");
 
                        mc = t.GetColumn ("DateColumn3");
                        Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null), "#C3");
                        Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty), "#C3-1");
                        Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean.ascx"), "#C3-2");
+                       Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#C3-3");
 
                        mc = t.GetColumn ("DateColumn4");
                        Assert.IsNotNull (mc.UIHint, "#C4");
@@ -708,12 +719,14 @@ namespace MonoTests.System.Web.DynamicData
                        Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null), "#C4-3");
                        Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty), "#C4-4");
                        Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean.ascx"), "#C4-5");
+                       Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#C4-6");
 
                        // Time
                        mc = t.GetColumn ("TimeColumn1");
                        Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null), "#D1");
                        Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty), "#D1-1");
                        Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean.ascx"), "#D1-2");
+                       Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#D1-3");
 
                        mc = t.GetColumn ("TimeColumn2");
                        Assert.IsNotNull (mc.UIHint, "#D2");
@@ -721,12 +734,14 @@ namespace MonoTests.System.Web.DynamicData
                        Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null), "#D2-3");
                        Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty), "#D2-4");
                        Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean.ascx"), "#D2-5");
+                       Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#D2-6");
 
                        // Duration
                        mc = t.GetColumn ("DurationColumn1");
                        Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null), "#E1");
                        Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty), "#E1-1");
                        Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean.ascx"), "#E1-2");
+                       Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#E1-3");
 
                        mc = t.GetColumn ("DurationColumn2");
                        Assert.IsNotNull (mc.UIHint, "#E2");
@@ -734,12 +749,14 @@ namespace MonoTests.System.Web.DynamicData
                        Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null), "#E2-3");
                        Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty), "#E2-4");
                        Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean.ascx"), "#E2-5");
+                       Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#E2-6");
 
                        // PhoneNumber
                        mc = t.GetColumn ("PhoneNumberColumn1");
                        Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null), "#F1");
                        Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty), "#F1-1");
                        Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean.ascx"), "#F1-2");
+                       Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#F1-3");
 
                        mc = t.GetColumn ("PhoneNumberColumn2");
                        Assert.IsNotNull (mc.UIHint, "#F2");
@@ -747,12 +764,14 @@ namespace MonoTests.System.Web.DynamicData
                        Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null), "#F2-3");
                        Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty), "#F2-4");
                        Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean.ascx"), "#F2-5");
+                       Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#F2-6");
 
                        // Currency
                        mc = t.GetColumn ("CurrencyColumn1");
                        Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null), "#G1");
                        Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty), "#G1-1");
                        Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean.ascx"), "#G1-2");
+                       Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#G1-3");
 
                        mc = t.GetColumn ("CurrencyColumn2");
                        Assert.IsNotNull (mc.UIHint, "#G2");
@@ -760,12 +779,14 @@ namespace MonoTests.System.Web.DynamicData
                        Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null), "#G2-3");
                        Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty), "#G2-4");
                        Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean.ascx"), "#G2-5");
+                       Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#G2-6");
 
                        // Text
                        mc = t.GetColumn ("TextColumn1");
                        Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null), "#H1");
                        Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty), "#H1-1");
                        Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean.ascx"), "#H1-2");
+                       Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#H1-3");
 
                        mc = t.GetColumn ("TextColumn2");
                        Assert.IsNotNull (mc.UIHint, "#H2");
@@ -773,12 +794,14 @@ namespace MonoTests.System.Web.DynamicData
                        Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null), "#H2-3");
                        Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty), "#H2-4");
                        Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean.ascx"), "#H2-5");
+                       Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#H2-6");
 
                        // Html
                        mc = t.GetColumn ("HtmlColumn1");
                        Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null), "#I1");
                        Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty), "#I1-1");
                        Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean.ascx"), "#I1-2");
+                       Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#I1-3");
 
                        mc = t.GetColumn ("HtmlColumn2");
                        Assert.IsNotNull (mc.UIHint, "#I2");
@@ -786,12 +809,14 @@ namespace MonoTests.System.Web.DynamicData
                        Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null), "#I2-3");
                        Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty), "#I2-4");
                        Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean.ascx"), "#I2-5");
+                       Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#I2-6");
 
                        // MultilineText
                        mc = t.GetColumn ("MultilineTextColumn1");
                        Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null), "#J1");
                        Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty), "#J1-1");
                        Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean.ascx"), "#J1-2");
+                       Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#J1-3");
 
                        mc = t.GetColumn ("MultilineTextColumn2");
                        Assert.IsNotNull (mc.UIHint, "#J2");
@@ -799,12 +824,14 @@ namespace MonoTests.System.Web.DynamicData
                        Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null), "#J2-3");
                        Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty), "#J2-4");
                        Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean.ascx"), "#J2-5");
+                       Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#J2-6");
 
                        // EmailAddress
                        mc = t.GetColumn ("EmailAddressColumn1");
                        Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null), "#K1");
                        Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty), "#K1-1");
                        Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean.ascx"), "#K1-2");
+                       Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#K1-3");
 
                        mc = t.GetColumn ("EmailAddressColumn2");
                        Assert.IsNotNull (mc.UIHint, "#K2");
@@ -812,12 +839,14 @@ namespace MonoTests.System.Web.DynamicData
                        Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null), "#K2-3");
                        Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty), "#K2-4");
                        Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean.ascx"), "#K2-5");
+                       Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#K2-6");
 
                        // Password
                        mc = t.GetColumn ("PasswordColumn1");
                        Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null), "#L1");
                        Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty), "#L1-1");
                        Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean.ascx"), "#L1-2");
+                       Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#L1-3");
 
                        mc = t.GetColumn ("PasswordColumn2");
                        Assert.IsNotNull (mc.UIHint, "#L2");
@@ -825,12 +854,14 @@ namespace MonoTests.System.Web.DynamicData
                        Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null), "#L2-3");
                        Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty), "#L2-4");
                        Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean.ascx"), "#L2-5");
+                       Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#L2-6");
 
                        // Url
                        mc = t.GetColumn ("UrlColumn1");
                        Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null), "#M1");
                        Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty), "#M1-1");
                        Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean.ascx"), "#M1-2");
+                       Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#M1-3");
 
                        mc = t.GetColumn ("UrlColumn2");
                        Assert.IsNotNull (mc.UIHint, "#M2");
@@ -838,6 +869,7 @@ namespace MonoTests.System.Web.DynamicData
                        Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, null), "#M2-3");
                        Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, String.Empty), "#M2-4");
                        Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Text.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean.ascx"), "#M2-5");
+                       Assert.AreEqual (ftf.TemplateFolderVirtualPath + "Boolean.ascx", ftf.GetFieldTemplateVirtualPath (mc, DataBoundControlMode.ReadOnly, "Boolean"), "#M2-6");
                }
 
                [Test]
index ee9e21aae75fd36dbab5ab50536a756e650bb834..bc015e08df147b9439e42ed096f12cd78eee9beb 100644 (file)
@@ -76,6 +76,8 @@ namespace MonoTests.System.Web.DynamicData
                        Type type = GetType ();
                        WebTest.CopyResource (type, "MonoTests.WebPages.ListView_DynamicControl_01.aspx", "ListView_DynamicControl_01.aspx");
                        WebTest.CopyResource (type, "MonoTests.WebPages.ListView_DynamicControl_01.aspx.cs", "ListView_DynamicControl_01.aspx.cs");
+                       WebTest.CopyResource (type, "MonoTests.WebPages.ListView_DynamicControl_10.aspx", "ListView_DynamicControl_10.aspx");
+                       WebTest.CopyResource (type, "MonoTests.WebPages.ListView_DynamicControl_10.aspx.cs", "ListView_DynamicControl_10.aspx.cs");
 
                        dynamicModelProvider = new DynamicDataContainerModelProvider<TestDataContext> ();
                        Utils.RegisterContext (dynamicModelProvider, new ContextConfiguration () { ScaffoldAllTables = true });
@@ -189,7 +191,9 @@ namespace MonoTests.System.Web.DynamicData
                        Assert.IsNotNull (field.Host, "#C10");
                        Assert.AreEqual (dc, field.Host, "#C10-1");
                        Assert.IsNotNull (field.MetadataAttributes, "#C11");
+                       Assert.AreEqual (dc.Column.Attributes, field.MetadataAttributes, "#C11-1");
                        Assert.AreEqual (DataBoundControlMode.ReadOnly, field.Mode, "#C12");
+                       Assert.AreEqual (field.Host.Mode, field.Mode, "#C12-1");
 
                        // Failure with the same exception as above
                        //Assert.IsNull (field.Row, "#C13");
@@ -197,5 +201,40 @@ namespace MonoTests.System.Web.DynamicData
                        Assert.IsNotNull (field.Table, "#C14");
                        Assert.AreEqual (dc.Table, field.Table, "#C14-1");
                }
+
+               [Test]
+               public void ChildrenPath ()
+               {
+                       var test = new WebTest ("ListView_DynamicControl_10.aspx");
+                       test.Invoker = PageInvoker.CreateOnInit (ChildrenPath_OnInit);
+                       var p = test.Run ();
+                       Assert.IsNotNull (test.Response, "#X1");
+                       Assert.AreNotEqual (HttpStatusCode.NotFound, test.Response.StatusCode, "#X1-1{0}Returned HTML:{0}{1}", Environment.NewLine, p);
+                       Assert.AreNotEqual (HttpStatusCode.InternalServerError, test.Response.StatusCode, "#X1-2{0}Returned HTML:{0}{1}", Environment.NewLine, p);
+                       Assert.IsFalse (String.IsNullOrEmpty (p), "#X1-3");
+               }
+
+               static void ChildrenPath_OnInit (Page p)
+               {
+                       var lc = p.FindControl ("ListView1") as ListView;
+                       Assert.IsNotNull (lc, "#A1");
+
+                       var page = p as TestsBasePage<TestDataContext3>;
+                       Assert.IsNotNull (p, "#A1-1");
+
+                       page.ItemDataBinding += new EventHandler(ChildrenPath_ListControl_OnDataBound);
+               }
+
+               static void ChildrenPath_ListControl_OnDataBound (object sender, EventArgs e)
+               {
+                       var dc = sender as DynamicControl;
+                       Assert.IsNotNull (dc, "#B1");
+                       Assert.AreEqual ("PrimaryKeyColumn2", dc.ID, "#B1-1");
+                       Assert.AreEqual (typeof (MetaChildrenColumn), dc.Column.GetType (), "#B1-2");
+
+                       var field = dc.FieldTemplate as PokerFieldTemplateUserControl;
+                       Assert.IsNotNull (field, "#C1");
+                       Assert.AreEqual ("/NunitWeb/AssociatedBarTable/List.aspx", field.GetChildrenPath (), "#C1-1");
+               }
        }
 }
index cac8ebba68552e402a78d587e528c09711ef72d3..76d528e4e790089e3eb0eddd9456c36a1a06858d 100644 (file)
@@ -37,6 +37,7 @@ using System.Data.Linq;
 using System.Data.Linq.Mapping;
 using System.Globalization;
 using System.Linq;
+using System.Net;
 using System.Reflection;
 using System.Security.Permissions;
 using System.Security.Principal;
@@ -45,12 +46,15 @@ using System.Web.UI;
 using System.Web.DynamicData;
 using System.Web.DynamicData.ModelProviders;
 using System.Web.Routing;
+using System.Web.UI.WebControls;
 
 using NUnit.Framework;
 using NUnit.Mocks;
 using MonoTests.stand_alone.WebHarness;
 using MonoTests.SystemWeb.Framework;
 using MonoTests.Common;
+using MonoTests.DataSource;
+using MonoTests.DataObjects;
 using MonoTests.ModelProviders;
 
 using MetaModel = System.Web.DynamicData.MetaModel;
@@ -70,6 +74,10 @@ namespace MonoTests.System.Web.DynamicData
                [TestFixtureSetUp]
                public void SetUp ()
                {
+                       Type type = GetType ();
+                       WebTest.CopyResource (type, "MonoTests.WebPages.ListView_DynamicControl_10.aspx", "ListView_DynamicControl_10.aspx");
+                       WebTest.CopyResource (type, "MonoTests.WebPages.ListView_DynamicControl_10.aspx.cs", "ListView_DynamicControl_10.aspx.cs");
+
                        dynamicModelProvider = new DynamicDataContainerModelProvider <TestDataContext> ();
                        Utils.RegisterContext (dynamicModelProvider, new ContextConfiguration () { ScaffoldAllTables = true });
                }
@@ -173,7 +181,7 @@ namespace MonoTests.System.Web.DynamicData
                        t = m.Tables[TestDataContext.TableBaz];
                        mc = t.DisplayColumn;
                        Assert.IsNotNull (mc, "#D1");
-                       Assert.AreEqual ("PrimaryKeyColumn2", mc.Name, "#D2");
+                       Assert.AreEqual ("CustomUIHintColumn", mc.Name, "#D2");
 
                        t = m.Tables[TestDataContext.TableBazNoStrings];
                        mc = t.DisplayColumn;
@@ -234,7 +242,7 @@ namespace MonoTests.System.Web.DynamicData
                        MetaTable t = m.Tables[TestDataContext.TableAssociatedFoo];
                        Assert.IsNotNull (t.ForeignKeyColumnsNames, "#A1");
                        Assert.IsFalse (t.ForeignKeyColumnsNames.Length == 0, "#A2");
-                       Assert.AreEqual ("ForeignKeyColumn1,PrimaryKeyColumn1", t.ForeignKeyColumnsNames, "#A3");
+                       Assert.AreEqual ("ForeignKeyColumn1,ForeignKeyColumn2,PrimaryKeyColumn1", t.ForeignKeyColumnsNames, "#A3");
                }
 
                [Test]
@@ -683,6 +691,48 @@ namespace MonoTests.System.Web.DynamicData
                        Assert.AreEqual (0, ret.Count, "#C2");
                }
 
+               [Test]
+               public void GetPrimaryKeyValues_01 ()
+               {
+                       var test = new WebTest ("ListView_DynamicControl_10.aspx");
+                       test.Invoker = PageInvoker.CreateOnInit (GetPrimaryKeyValues_01_OnInit);
+                       var p = test.Run ();
+                       Assert.IsNotNull (test.Response, "#X1");
+                       Assert.AreNotEqual (HttpStatusCode.NotFound, test.Response.StatusCode, "#X1-1{0}Returned HTML:{0}{1}", Environment.NewLine, p);
+                       Assert.AreNotEqual (HttpStatusCode.InternalServerError, test.Response.StatusCode, "#X1-2{0}Returned HTML:{0}{1}", Environment.NewLine, p);
+                       Assert.IsFalse (String.IsNullOrEmpty (p), "#X1-3");
+               }
+
+               static void GetPrimaryKeyValues_01_OnInit (Page p)
+               {
+                       var lc = p.FindControl ("ListView1") as ListView;
+                       Assert.IsNotNull (lc, "#A1");
+
+                       var page = p as TestsBasePage<TestDataContext3>;
+                       Assert.IsNotNull (p, "#A1-1");
+
+                       page.ItemDataBinding += new EventHandler (GetPrimaryKeyValues_01_ListControl_OnItemDataBinding);
+               }
+
+               static void GetPrimaryKeyValues_01_ListControl_OnItemDataBinding (object sender, EventArgs e)
+               {
+                       var dc = sender as DynamicControl;
+                       Assert.IsNotNull (dc, "#B1");
+                       Assert.AreEqual ("PrimaryKeyColumn2", dc.ID, "#B1-1");
+                       Assert.AreEqual (typeof (MetaChildrenColumn), dc.Column.GetType (), "#B1-2");
+
+                       var field = dc.FieldTemplate as PokerFieldTemplateUserControl;
+                       Assert.IsNotNull (field, "#C1");
+
+                       var keyValues = dc.Table.GetPrimaryKeyValues (field.Row);
+                       Assert.IsNotNull (keyValues, "#D1");
+                       Assert.AreEqual (2, keyValues.Count, "#D1-1");
+                       Assert.AreEqual (typeof (string), keyValues[0].GetType (), "#D1-2");
+                       Assert.AreEqual ("Marek", (string)keyValues[0], "#D1-3");
+                       Assert.AreEqual (typeof (int), keyValues[1].GetType (), "D1-4");
+                       Assert.AreEqual (2, (int)keyValues[1], "#D1-5");
+               }
+
                [Test]
                public void GetQuery ()
                {
index c282462be55c1579b4649b168987610211e00952..5285b7e9174af4d08469678c6bf0aad5d9470187 100644 (file)
@@ -13,7 +13,9 @@ using System.Web.UI.HtmlControls;
 using System.Xml.Linq;
 using System.Web.DynamicData;
 
-public partial class ChildrenField : System.Web.DynamicData.FieldTemplateUserControl {
+using MonoTests.Common;
+
+public partial class ChildrenField : PokerFieldTemplateUserControl {
     private bool _allowNavigation = true;
     private string _navigateUrl;
 
diff --git a/mcs/class/System.Web.DynamicData/Test/WebPages/ListView_DynamicControl_10.aspx b/mcs/class/System.Web.DynamicData/Test/WebPages/ListView_DynamicControl_10.aspx
new file mode 100644 (file)
index 0000000..5e5d5cc
--- /dev/null
@@ -0,0 +1,29 @@
+<%@ Page Language="C#" AutoEventWireup="true" CodeFile="ListView_DynamicControl_10.aspx.cs" Inherits="ListView_DynamicControl_10" %>
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html >
+<head id="Head1" runat="server">
+  <title>DynamicControl Sample</title>
+</head>
+<body>
+    <form id="form1" runat="server">
+    <div>
+      <asp:DynamicDataManager ID="DynamicDataManager1" runat="server" AutoLoadForeignKeys="true" />
+      <asp:ListView ID="ListView1" runat="server" DataSourceID="DynamicDataSource1">
+        <LayoutTemplate>
+          <div runat="server" id="itemPlaceholder" />
+        </LayoutTemplate>
+        <ItemTemplate>
+       <div>
+               <test:PokerDynamicControl runat="server" DataField="PrimaryKeyColumn1" id="PrimaryKeyColumn1"/> 
+               <test:PokerDynamicControl runat="server" DataField="PrimaryKeyColumn2" id="PrimaryKeyColumn2" OnDataBinding="Item_DataBinding"/>
+               <test:PokerDynamicControl runat="server" DataField="Column1" ID="Column1" CssClass="activeCssClass" />
+        </div>
+        </ItemTemplate>
+      </asp:ListView>
+
+       <test:DynamicDataSource runat="server" id="DynamicDataSource1" />
+    </div>
+    </form>
+</body>
+</html>
diff --git a/mcs/class/System.Web.DynamicData/Test/WebPages/ListView_DynamicControl_10.aspx.cs b/mcs/class/System.Web.DynamicData/Test/WebPages/ListView_DynamicControl_10.aspx.cs
new file mode 100644 (file)
index 0000000..06767e5
--- /dev/null
@@ -0,0 +1,34 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Web;
+using System.Web.UI;
+using System.Web.UI.WebControls;
+
+using MonoTests.DataObjects;
+using MonoTests.Common;
+using MonoTests.SystemWeb.Framework;
+using MonoTests.DataSource;
+
+public partial class ListView_DynamicControl_10 : TestsBasePage <TestDataContext3>
+{
+       protected override void PopulateDataSource (DynamicDataSource ds)
+       {
+               var container = ds.DataContainerInstance as TestDataContainer<TestDataContext3>;
+               if (container == null)
+                       return;
+
+               List<AssociatedFoo> foo = container.ContainedTypeInstance.AssociatedFoo;
+               foo.Add (new AssociatedFoo {
+                       PrimaryKeyColumn1 = "Marek",
+                       PrimaryKeyColumn2 = 2,
+                       Column1 = 1
+               });
+       }
+
+       protected void Page_Init (object sender, EventArgs e)
+       {
+               InitializeDataSource (DynamicDataSource1, "AssociatedFooTable");
+               DynamicDataManager1.RegisterControl (ListView1);
+       }
+}