UserFormCollector.cs
上传用户:husern
上传日期:2022-03-24
资源大小:534k
文件大小:3k
源码类别:

编辑器/阅读器

开发平台:

C#

  1. // -- FILE ------------------------------------------------------------------
  2. // name       : UserFormCollector.cs
  3. // project    : Itenso Web User Forms
  4. // created    : Jani Giannoudis - 2008.10.30
  5. // language   : c#
  6. // environment: .NET 2.0
  7. // copyright  : (c) 2008 by Itenso GmbH, Switzerland
  8. // --------------------------------------------------------------------------
  9. using System;
  10. using System.Web.UI;
  11. namespace Itenso.WebUserForms.Controls
  12. {
  13. // ------------------------------------------------------------------------
  14. public sealed class UserFormCollector
  15. {
  16. // ----------------------------------------------------------------------
  17. private UserFormCollector()
  18. {
  19. } // UserFormCollector
  20. // ----------------------------------------------------------------------
  21. public static UserForm CollectUserForm( UserControl userControl )
  22. {
  23. if ( userControl == null )
  24. {
  25. throw new ArgumentNullException( "userControl" );
  26. }
  27. if ( userControl.Controls.Count == 0 )
  28. {
  29. return null;
  30. }
  31. return ParseUserForm( userControl, null );
  32. } // CollectUserForm
  33. // ----------------------------------------------------------------------
  34. private static UserForm ParseUserForm( Control control, UserForm userForm )
  35. {
  36. if ( control.Controls.Count == 0 )
  37. {
  38. return null;
  39. }
  40. IUserFormHeader formHeader = FindFormHeader( control.Controls );
  41. if ( userForm == null ) // main form
  42. {
  43. if ( formHeader == null ) // header on root form is required
  44. {
  45. throw new FormHeaderException( "missing form header" );
  46. }
  47. else if ( string.IsNullOrEmpty( formHeader.Type ) )
  48. {
  49. throw new FormHeaderException( "invalid form header type", formHeader );
  50. }
  51. else if ( string.IsNullOrEmpty( formHeader.Name ) )
  52. {
  53. throw new FormHeaderException( "invalid form header name", formHeader );
  54. }
  55. userForm = new UserForm( formHeader );
  56. }
  57. else if ( formHeader != null ) // found sub form
  58. {
  59. UserForm subform = new UserForm( formHeader );
  60. userForm.Subforms.Add( subform );
  61. userForm = subform;
  62. }
  63. CollectFormFields( control.Controls, userForm );
  64. foreach ( Control subControl in control.Controls )
  65. {
  66. ParseUserForm( subControl, userForm );
  67. }
  68. return userForm;
  69. } // ParseUserForm
  70. // ----------------------------------------------------------------------
  71. private static IUserFormHeader FindFormHeader( ControlCollection controls )
  72. {
  73. foreach ( Control control in controls )
  74. {
  75. IUserFormHeader formHeader = control as IUserFormHeader;
  76. if ( formHeader != null )
  77. {
  78. return formHeader;
  79. }
  80. }
  81. return null;
  82. } // FindFormHeader
  83. // ----------------------------------------------------------------------
  84. private static void CollectFormFields( ControlCollection controls, UserForm form )
  85. {
  86. foreach ( Control control in controls )
  87. {
  88. IUserFormField formField = control as IUserFormField;
  89. if ( formField == null )
  90. {
  91. continue;
  92. }
  93. if ( string.IsNullOrEmpty( formField.FieldName ) )
  94. {
  95. throw new FormFieldException( "missing field name", formField );
  96. }
  97. form.Fields.Add( formField );
  98. }
  99. } // CollectFormFields
  100. } // class UserFormCollector
  101. } // namespace Itenso.WebUserForms.Controls
  102. // -- EOF -------------------------------------------------------------------