New Community Website

Ordinarily, you'd be at the right spot, but we've recently launched a brand new community website... For the community, by the community.

Yay... Take Me to the Community!

The Community Blog is a personal opinion of community members and by no means the official standpoint of DNN Corp or DNN Platform. This is a place to express personal thoughts about DNNPlatform, the community and its ecosystem. Do you have useful information that you would like to share with the DNN Community in a featured article or blog? If so, please contact .

The use of the Community Blog is covered by our Community Blog Guidelines - please read before commenting or posting.

DotNetNuke® Case Study: DynamicForms

Recently I decided to make a prototype of a DotNetNuke module project that achieved these goals:

  • A database application that gathers data
  • Each record can have an unlimited number of forms used for processing the same record
  • Each form can share values with other forms

After prototyping different designs, this is the design I decided on:

Dynamic Forms

I do not recommend using dynamic forms for providing module navigation. See Module Navigation Options for alternative methods. However, for this application I needed to create an unlimited amount of forms so dynamically loading the forms into a content placeholder was a perfect fit.

Dynamically Loaded Controls Do Not Save Viewstate!

When you load a ASP.NET control dynamically and then click the submit button on the main page (causing a postback), the dynamically loaded control disappears and you lose all the information! As you can imagine, discovering this 2 days into the prototype makes you glad you decided to make the prototype because you are now forced to come up with a different game plan.

Enter Denis Bauer

Denis Bauer has created a Dynamic Placeholder that maintains the viewstate of dynamically loaded controls. He also provides the source. Without this code this module simply would not work.


The module uses the following database schema. Two different tables hold the data collected by the forms. The DynamicForms_RecordData_Large is used to hold the large text data. Any Textbox control that has multiple rows will have it's data stored in this table. All other controls store their data in DynamicForms_RecordData.


You can open any of the controls in the DynamicControls folder and add or remove the standard form controls. The program will automatically gather and store the information with no other modification needed. If you desire for the forms to display the same data, simply give the controls the same ID name.

The drop-down in the example uses a database lookup to generate the list of Modules. This database lookup is placed in the Page_Init of the control in order to work properly.

The module also uses the DAL+. This provided for very rapid module development. The dynamic queries could easily be converted to stored procedures if that is desired. The paging method uses the ROW_NUMBER() function that is only available in SQL Server 2005. For this reason the module will only work with SQL Server 2005. This paging method allows the module to page through large sets of data efficiently.

Here is the code (you can also Download the code at this link):


  • Due to the use of ROW_NUMBER() OVER(ORDER BY RecordID) AS RowNumber in the DAL code, this module will only work with SQL Server 2005 and SQL Server 2005 express. It will not work on SQL Server 2000
  • This is only a prototype so this code has not been properly tested. Therefore this code is not meant to be used in production. It is only meant to be used as a programming example.

Download the code at this link


Comment Form

Only registered users may post comments.


Aderson Oliveira (22)
Alec Whittington (11)
Alessandra Davies (3)
Alex Shirley (10)
Andrew Hoefling (3)
Andrew Nurse (30)
Andy Tryba (1)
Anthony Glenwright (5)
Antonio Chagoury (28)
Ash Prasad (37)
Ben Schmidt (1)
Benjamin Hermann (25)
Benoit Sarton (9)
Beth Firebaugh (12)
Bill Walker (36)
Bob Kruger (5)
Bogdan Litescu (1)
Brian Dukes (2)
Brice Snow (1)
Bruce Chapman (20)
Bryan Andrews (1)
cathal connolly (55)
Charles Nurse (163)
Chris Hammond (213)
Chris Paterra (55)
Clint Patterson (108)
Cuong Dang (21)
Daniel Bartholomew (2)
Daniel Mettler (181)
Daniel Valadas (48)
Dave Buckner (2)
David Poindexter (12)
David Rodriguez (3)
Dennis Shiao (1)
Doug Howell (11)
Erik van Ballegoij (30)
Ernst Peter Tamminga (80)
Francisco Perez Andres (17)
Geoff Barlow (12)
George Alatrash (12)
Gifford Watkins (3)
Gilles Le Pigocher (3)
Ian Robinson (7)
Israel Martinez (17)
Jan Blomquist (2)
Jan Jonas (3)
Jaspreet Bhatia (1)
Jenni Merrifield (6)
Joe Brinkman (274)
John Mitchell (1)
Jon Henning (14)
Jonathan Sheely (4)
Jordan Coopersmith (1)
Joseph Craig (2)
Kan Ma (1)
Keivan Beigi (3)
Kelly Ford (4)
Ken Grierson (10)
Kevin Schreiner (6)
Leigh Pointer (31)
Lorraine Young (60)
Malik Khan (1)
Matt Rutledge (2)
Matthias Schlomann (16)
Mauricio Márquez (5)
Michael Doxsey (7)
Michael Tobisch (3)
Michael Washington (202)
Miguel Gatmaytan (3)
Mike Horton (19)
Mitchel Sellers (40)
Nathan Rover (3)
Navin V Nagiah (14)
Néstor Sánchez (31)
Nik Kalyani (14)
Oliver Hine (1)
Patricio F. Salinas (1)
Patrick Ryan (1)
Peter Donker (54)
Philip Beadle (135)
Philipp Becker (4)
Richard Dumas (22)
Robert J Collins (5)
Roger Selwyn (8)
Ruben Lopez (1)
Ryan Martinez (1)
Sacha Trauwaen (1)
Salar Golestanian (4)
Sanjay Mehrotra (9)
Scott McCulloch (1)
Scott Schlesier (11)
Scott Wilkinson (3)
Scott Willhite (97)
Sebastian Leupold (80)
Shaun Walker (237)
Shawn Mehaffie (17)
Stefan Cullmann (12)
Stefan Kamphuis (12)
Steve Fabian (31)
Steven Fisher (1)
Timo Breumelhof (24)
Tony Henrich (3)
Torsten Weggen (3)
Tycho de Waard (4)
Vicenç Masanas (27)
Vincent Nguyen (3)
Vitaly Kozadayev (6)
Will Morgenweck (40)
Will Strohl (180)
William Severance (5)
What is Liquid Content?
Find Out
What is Liquid Content?
Find Out
What is Liquid Content?
Find Out