|
// -- FILE ------------------------------------------------------------------
// name : UserFormCollector.cs
// project : Itenso Web User Forms
// created : Jani Giannoudis - 2008.10.30
// language : c#
// environment: .NET 2.0
// copyright : (c) 2008-2012 by Itenso GmbH, Switzerland
// --------------------------------------------------------------------------
using System;
using System.Web.UI;
namespace Itenso.WebUserForms.Controls
{
// ------------------------------------------------------------------------
public static class UserFormCollector
{
// ----------------------------------------------------------------------
public static UserForm CollectUserForm( UserControl userControl )
{
if ( userControl == null )
{
throw new ArgumentNullException( "userControl" );
}
if ( userControl.Controls.Count == 0 )
{
return null;
}
return ParseUserForm( userControl, null );
} // CollectUserForm
// ----------------------------------------------------------------------
private static UserForm ParseUserForm( Control control, UserForm userForm )
{
if ( control.Controls.Count == 0 )
{
return null;
}
IUserFormHeader formHeader = FindFormHeader( control.Controls );
if ( userForm == null ) // main form
{
if ( formHeader == null ) // header on root form is required
{
throw new FormHeaderException( "missing form header" );
}
if ( string.IsNullOrEmpty( formHeader.Type ) )
{
throw new FormHeaderException( "invalid form header type", formHeader );
}
if ( string.IsNullOrEmpty( formHeader.Name ) )
{
throw new FormHeaderException( "invalid form header name", formHeader );
}
userForm = new UserForm( formHeader );
}
else if ( formHeader != null ) // found sub form
{
UserForm subform = new UserForm( formHeader );
userForm.Subforms.Add( subform );
userForm = subform;
}
CollectFormFields( control.Controls, userForm );
foreach ( Control subControl in control.Controls )
{
ParseUserForm( subControl, userForm );
}
return userForm;
} // ParseUserForm
// ----------------------------------------------------------------------
private static IUserFormHeader FindFormHeader( ControlCollection controls )
{
foreach ( Control control in controls )
{
IUserFormHeader formHeader = control as IUserFormHeader;
if ( formHeader != null )
{
return formHeader;
}
}
return null;
} // FindFormHeader
// ----------------------------------------------------------------------
private static void CollectFormFields( ControlCollection controls, IUserForm form )
{
foreach ( Control control in controls )
{
IUserFormField formField = control as IUserFormField;
if ( formField == null )
{
continue;
}
if ( string.IsNullOrEmpty( formField.FieldName ) )
{
throw new FormFieldException( "missing field name", formField );
}
form.Fields.Add( formField );
}
} // CollectFormFields
} // class UserFormCollector
} // namespace Itenso.WebUserForms.Controls
// -- EOF -------------------------------------------------------------------
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
👨 Senior .NET Software Engineer
🚀 My Open Source Projects
-
Time Period Library 👉
GitHub
-
Payroll Engine 👉
GitHub
Feedback and contributions are welcome.