INTRODUCTION AND RELEVANT INFORMATION
I am programming application that writes data about contracts into database. It is similar to banking software.
Contract is very complex data, so let me describe its structure:
It has basic info that is represented with a set of basic controls ( button, checkbox, textbox etc ).
Contract may or may not have additional complex data that describes it, in view of an annex.
Contract may or may not have additional complex data that describes it, in view of a special report.
Annex and Report have exactly the same characteristics like the original contract. They have same buttons, textboxes and so on. The only difference between Contract and these two is the fact that Contract has 2 extra textboxes, and of course, that Annex and Report are part of a Contract.
After asking for help here previously, and researching online I have decided to use master-detail interface to preserve space. That way user can both add new data or edit/delete/search/print/etc existing one.
MY EFFORTS TO SOLVE THIS
In order to present such enormous amount of data I have decided to use tab control. This solution halved the amount of occupied space.
For displaying existing data, I have decided to use treeview control because of following :
- It can present contract as a root node.
- If contract has anexes or/and reports, they can be shown as child nodes.
Below are the sketches of tab control when user enters contract/annex/report.
Second tab has same controls for Contract/Annex/Report. First tab has extra 2 controls for Contract, but is the same for both Annex and Report. In the mockup I have shown first tab for Contract in order to provide point of reference for the readers of this post.
Here are the sketches of treeview for following cases:
- Contract has no annexes or reports.
- Contract has 2 annexes.
- Contract has 2 reports.
- Contract has annexes and reports.
Below is the sketch of what I have "figured out" so far.
MECHANICS FOR ENTERING NEW / EDITING EXISTING DATA:
As said before, treeview represents existing data in database.
If user wants to edit contract/annex/report, he checks desired node and presss
< button. This loads selected node into tab control. When finished with editing, user saves edits by pressing
> button and changes are saved.
If user wants to add new annex/report to the contract, he can do so by loading existing contract into tab control ( by pressing
< button ) and then pressing
New Annex or
New Report button ( these buttons will become enabled as soon as contract gets loaded into tab control ). Once finished with entering data for annex/report user must press
save button in order to add the new entry.
New contract is added by pressing
New Contract button -> tab control gets reset and cleared. Once user finishes entering data he must press
save button to add the contract into database. Contract will be shown in treeview control.
User can abort editing/new entry by pressing
If user wants to delete/print contract/annex/report, it can be done by checking desired node and pressing corresponding button.
As for search option, pressing that button will launch a dialog box where user will configure search criteria. Treeview will be repopulated with search results.
I believe my general idea is good -> use tab control for entering data, and treeview for showing existing entries. I am also satisfied with the solution for editing contract/annex/report via
> buttons. Printing, deleting and search functions are also properly implemented in my opinion.
However, adding new entry - be that contract/annex/report - is inefficient in my opinion. The same goes for the case when user loads existing contract into tab control and tries to add new annex/report.
I believe my design is very "clumsy" and inefficient, which is the result of my inexperience.
- How can I improve "mechanics" for adding new annex/report to the new/existing contract?
- Is there a better way to implement entering of new contract, than adding special button to it ( maybe I could add special tab in the tab control, like
+for this purpose)?
- If you have better solution for implementing this type of master-detail interface I will consider it as well.
If further info is required leave a comment and I will update my post with relevant information.