UI Design of WinForm CRUD App, What works?
Disclaimer: I have been doing CRUDs for I don't know how long, but I'm just starting now with my first winforms app.
So, some mixed ideas:
In our current system (written using Centura/Gupta) we use a MDI-like approach. I think it is important to allow the user to start working on a new record without forcing him to close his current work, so a list of open windows is always displayed to allow quick switching between the different forms. Example:
(source: pingmbh.de)
List of open windows in the lower left.
Also this system makes it possible to open one record from inside another, e.g. open a customer, show the orders of this customer, doubleclick on one of his orders to open it and so on.
Now about winforms: After doing some research I deceided against MDI and instead use a Form containing some SplitContainers. One of this container panels shows a list of open windows, another shows the current form. Since I did not find a way to show a Form in a panel, the forms are realized as user controls. The main form keeps track of the opened windows and displays them in the window list. If the user clicks on a window in the list, or opens the same record from somewhere else in the programm, the appropriate panel is brought to the front. Picture of a work in progress:
(source: pingmbh.de)
Consider to seperate the selection of existing records from the editing of these records, i.e. show the existing records in some kind of table (like a gridview) with filter and search capabilities and let the user doubleclick these records to edit them.
I noticed on your screenshot that you have buttons for "Insert" and "Update". Is this for creating new records and saving existing records? I think a better approach is to give the user a "New" button, then open a form that has "save" and "cancel" buttons. The user may not allways remember if he started to edit a new or an existing record.
The selection screen btw is a good place for the "new record" button.
There are a few accepted patterns here, and you can sometimes combine them productively:
- TabPages
- TreeView (Win Explorer Folders, Visual Studio's Tools|Options)
- Collapsing Panels (Outlook Mail/Calendar/Contacts)
The Collapsing Panels are not a standard control but there are several implementations available (here's just one)
And your not alone, for some inspiration see this SO answer.
One of the most important things I've learned through CRUD type apps, is to make sure that there are hotkeys for nearly every button and that the tab order is setup properly.
Most of the time, when you're doing data entry/modification, you don't want to drop your hands off the keyboard to move the mouse to the Submit/Update button, especially with large volumes of data to work with. Having these two items in order will greatly enhance the productivity of the app.