Scott Mitchell has written a series of articles on creating dynamic, data-driven UI - see
http://aspnet.4guysfromrolla.com/articles/082008-1.aspx[
^]. It's for webforms but the principles can be applied to WinForms too.
There is also an
MS Article[
^] - again Web based but some useful stuff in there
I'm assuming that you are comfortable dynamically adding controls to a form via code but just in case (and for anyone else stumbling across this)
there is a tutorial here[
^]
Another technique I've seen used was to have pre-built forms but the data to determine the actual one that could be loaded was based on a role table. There was a sort of "controller" class that was called with form "alias" which would either show the form required or show a generic "You can't do this" form as required. Sorry the details are a bit vague but it was a long time ago and it was written in an old form of VB that shall remain nameless.
There is a commercial CRM product that stores ALL of it's UI definitions in a database - and I mean all! The "form" or parts of forms were generated at run-time from all that information. As you can imagine, sometimes it could be quite slow to navigate around. But that was mitigated by keeping the forms simple. If you have "fixed" areas then that would ease the load (excuse the pun).
Finally (from me) there is an Open University research program called
Cedar[
^] - might be worth having a look through their publications on the subject