title: Are there VB.NET UI Templates for Managing a DataSet?
body: <p>Is there a quick and easy way to make a VB.NET user interface for managing the data in a normalized DataSet?</p>
  
  <p>I know that is a very subjective question, so let me explain. For a brief period early in my career, I used to create user interfaces in Microsoft Access. I developed a simple, but very effective approach to user interface design. Here are some details of that approach:</p>
  
  <ul>
  <li>Create one form per table. Put on
  each form all controls necessary to
  completely manage one row in the
  table.</li>
  <li>Use combo boxes for
  foreign-key columns.</li>
  <li>Give the user a
  standard way to add rows and delete
  rows.</li>
  <li>Use Apply and Undo buttons.</li>
  <li>Let
  the user navigate from one row to
  another with a list box.</li>
  <li>Provide a
  search box and filter options for
  more efficient navigation.</li>
  <li>Let the
  user double-click on controls
  representing foreign-key columns to
  quickly navigate from one form to
  another.</li>
  <li>Make the state of each form
  persistent (so the user always
  returns to the last navigation point)</li>
  <li>etc.</li>
  </ul>
  
  <p>Simple, right? I found that Access encouraged this approach. It has many built-in features that make this kind of UI easy. For instance, creating a combo box to represent a foreign key relationship takes about 10 seconds.</p>
  
  <p>Well, I haven't worked in Access for a while. A couple of years ago, however, I was hired to write an application in VB.NET on the NET 2.0 framework. To get a data management user interface up and running quickly, I used my Access experience to write a quick &amp; easy prototype in Access -- that took me about one week. Then I hired a programmer to implement that same UI in VB.NET. What a nightmare! We've been working on that implementation for a year, and I'm still very unsatisfied with the results. Some of the problems we are having:</p>
  
  <ul>
  <li>Apply and Undo buttons don't work quite right. We can't find an event that tells us when the form is "dirty" (thus making Apply and Undo relevant).</li>
  <li>Navigation from row to row and from form to form requires surprisingly complicated code. I get the impression that we are fighting against NET's binding features, not working with them the way they were intended to be used.</li>
  <li>The NET controls seem buggy. For instance, when the user types a value into a combo box (as opposed to choosing it from the drop down), it doesn't trigger the SelectedValueChanged event.</li>
  <li>We seem to be repeating a lot of information. For instance, the DataSet knows there is a relationship between the columns in two tables, but we must nevertheless effectively repeat the details of that relationship when we program the combo boxes, binding, navigtation features, etc.</li>
  <li>We still don't have good solutions for the filter and search features. There are lots of little details to work out. (For instance, what if you choose a filter that doesn't include the currently displayed row?)</li>
  <li>We are writing many helper functions and classes to simplify the work, and I can't figure out why that effort hasn't already been done by others -- I'm certain we are reinventing the wheel.</li>
  <li>etc.</li>
  </ul>
  
  <p>By themselves, none of the above are a big deal -- there are effective solutions to each one. Taken together, however, these problems are making my UI development go much slower than expected.</p>
  
  <p>In an ideal world, I should be able to create a small amount of code relevant to my specific data model (for instance, one user control per table establishing the layout and logic relevant to the rows in that table) then integrate that code into a template which interprets the data model and handles everything else -- navigation, adding and deleting, apply and undo, search and filter, etc.</p>
  
  <p>Thus, my question: Is there anything out there which makes this type of UI development easier?</p>
  
  <p>I've searched the web for various combinations of "generic forms", "UI templates", "data managment forms", etc., but I haven't found anything on topic. Perhaps I just don't know the buzzwords. Is there a specific name for this type of UI development task?</p>