User interface choice for managing an "orders" table - vb.net

I'm using VB Net, but this is entirely a question about user interface, not coding.
I want to "manage" a table of "orders." Orders is a typical table with a foreign key pointing to a customer, and a one-to-many relationship with a "details" table. To manage orders means to enter new orders, add details to orders, record payments, print a list of orders, cancel orders, mark orders shipped, print one order, etc., etc. These tasks can be divided into tasks that affect single orders (cancel an order) and tasks that affect multiple orders (print a list of orders).
That task division led me to this user interface: present a form/window that displays by default a list of orders, and provide a button that switches the view from list mode to single-order mode. Each mode then provides the buttons for its tasks.
I first implemented this with panels, putting the controls for each view into its own panel, and then superimposing the panels. I then use hide and show methods to switch between panels, effectively switching between views. It works, but meh...
Would it be better to use a tabbed control, and put each view on its own tab? I'm not trying to re-invent any wheels. I know nobody gets fired for making it look like a Microsoft app. LOL :) But I haven't seen any retail applications to copy from.

I'd argue that your "multiple panels" approach IS tabs, just without the tab part. In reality, tab controls do basically what you've already done with code, they just hide that behind a convenient design time facade.
Still, it's the same thing.
E James answer is pretty good. Would it make sense to put both on screen at a time? is this a touch screen app or a traditional windows app? How sophisticated is the target user?
Those are a few questions that should drive how complex you let the screen get.

Do you have room to show the list and all of the possible controls? If so, I would start with all controls disabled. When you select a single order, only the single order controls would be enabled, and when you select multiple orders, only the multiple orders controls would be enabled.
I would also put the most common tasks right into the list, if possible, so that only one click is required for frequent tasks.

Related

Posting Panels Twice (Understanding pre-init)

I have a page that dynamically builds a group of Panels based on a SQL call.
Here is an example of what I am trying to accomplish.
When the page is first loaded several Panels are dynamically built. Lets say there is one panel for each State: CA, NJ, FL, etc.
If a user clicks on one of the panels (ie. one of the states) a SQL call is made and brings back a list of cities within that state. The page then dynamically builds the panels only this time listing the cities within the state clicked. When the user clicks on of the cities it calls SQL and find all of the schools listed in that city and displays them in panels (again one school per panel).
What's Happening
When the states are loaded they display fine. Though when the user clicks a particular state the page reloads and then displays all of states and all of the cities after listing all of the states instead of just listing the cities.
The proper cities are being listed so the SQL call is working.
Solution
I know several things.
ViewState is remembering the panels previously created and loading them
or
When I step through the code it's loading both the states and then the cities.
Dynamic controls are handed during the pre-init stage of the life-cycle.
Question
How can I solve this problem? I didn't post any relevant code because there is a decent amount of it to sift though. If parts of it are needed / wanted ask and I can edit this post.
I have already searched though Microsoft's documentation and the like so please don't post links to those unless you are fairly certain they will help with the issue.

Dont hide a menu/menuitem on click

I am using vb.net and don't want to use WPF.
I have a menustrip having many menus.
These menus have many menuItems.
When I click on any menuItem I show a new form to the user.
When user finish his work and return to the main form he should be able to see the menu as it was while he left the main form.
I mean when I click on a menuItem the menu closes. But I don't want it to close.
It will likely be more confusing for your users having a menu that never closes because it defies expected behaviour. You are better off using one of the other controls suggested.
Every Operating System (Windows, Mac etc) define a standard set of controls for a reason - to enforce consistency and predictability across multiple applications. It's why you know to look to the menu to find a command. Microsoft, Apple etc all produce "design standards" documents that specify a baseline for the way that your user interacts with your app.
If a user selects something from the menu and the menu never closes, the user could well think that your application is broken.

Assigning a custom workflow to a work item type in Rational Team Concert

I'm in the process of customizing Rational Team Concert to include a custom work item type. As part of the testing of the work item type as I created it I populated a few of the custom work items with data. As I enhanced the custom work item type and added additional attributes I was able to use the "Check attributes usages in repository" from the "Types and Attributes" to ensure that the new attributes were propagated to my test work items.
Now I've gotten to the point where I need to create a custom workflow for this work item type. I've defined the workflow and and assigned it to the work item type, but my existing test work items can't seem to use it. Clicking on the "Check workflow usages in repository" link says "There are 9 work items in the repository referencing workflow states or resolutions that are not present in the bound workflow. Do you want to show these items in the Work Items view?".
The workitem view then just says that status = 1 for the test work items.
If I select a work to open in the rich client editor all of the process elements are inactive. If I open it in the web editor, it says that the status is "1", as shown below:
Is there any way to fix this and change the workflow of existing work items? I should add that new work items work just fine, but I'm worried about what might happen if I need to update the process again in the future.
In the context of work item customization, you have to manually sync existing work item attributes with the most recent version of the PA in order to take your changes into account.
The steps are detailed here in the manual page "Defining work item types and attributes":
(bottom of the page)
To manually update existing work items with new or modified custom attributes:
Run a query so that the query results contain all the work items that you want to update.
Note: Do not select any relationships to be shown in the query results.
If relationships are shown, the Type icon is not displayed and you cannot complete these steps.
To clear all relationships shown, in the Work Items view menu, select Relationships, click Deselect all, and then click OK.
In the Work Items view, select the work items that you want to modify.
In the row of one of the selected work items, right-click the Type icon and select Synchronize attributes.
Thanks.
Eric.

Connecting two DialogBoxes in GWT

In my GWT project, I'm trying to get it so two DialogBoxes can pass information between each other. One of them holds a MapWidget, and when a button is pressed in the other DialogBox, the position information is received from that other DialogBox's MapWidget. Does anyone have any tips for how I should coordinate between having two different DialogBoxes show up? Should I wrap the code for the two in a Composite? Furthermore, is there an example anywhere of dealing with two DialogBoxes at once in GWT? For example, if I click outside of the two boxes, both should be dismissed. I'm wondering if there's a way to keep both of them in focus at once, so I can switch between the two without causing either to disappear.
Sharing Data Between Dialog Boxes
In my opinion, the "correct" way to do this would be to implement some sort of MVP structure in the application so that a presenter manages the view (DialogBoxes, among other things) and knows how to pass simple data to the view for it to display (the presenter would handle the MapWidget data, the view would take care of displaying it on the DOM).
However, if you're looking for a quicker/more simpler approach, you have a couple of options (which you choose really depends on the application structure):
Create a Composite, as you mentioned, that knows how to pass the necessary data back and forth. By having the Composite manage the data object and tell the two DialogBoxes how to display it, you are actually approaching an MVP architecture within your Composite.
Subclass DialogBox into a class that contains a HandlerManager (sometimes used as an "Event Bus") that fires events when the button is pressed. You can create events that are designed to pass data back and forth between the two DialogBoxes (even make them type-safe with type parameters). See this StackOverflow question for details on using a HandlerManager. The MVP article, linked above, also has some good information on using an event bus.
Model-View-Presenter is a tried-and-true method of structuring an application that results in more testable code, better project structure, and can help guide you when making decisions like this. I strongly recommend checking it out if you haven't already.
Sharing Auto-Hide Functionality
GWT's PopupPanel (on which DialogBox is based) offers a method addAutoHidePartner(Element) which is describe thusly:
Mouse events that occur within an autoHide partner will not hide a panel set to autoHide.
So, you can create two auto-hiding DialogBoxes that only close when you click outside both of them (e.g., they do not close when you click within either of the boxes) with the following code:
// Create the dialog boxes
DialogBox dbox1 = new DialogBox(true, false);
DialogBox dbox2 = new DialogBox(true, false);
// Set some visual options
dbox1.setPopupPosition(10, 10);
dbox2.setPopupPosition(200, 10);
dbox1.setAnimationEnabled(true);
dbox2.setAnimationEnabled(false);
// Set the dialog boxes' caption and content
dbox1.setHTML("Dialog Box 1");
dbox2.setHTML("Dialog Box 2");
dbox1.setWidget(new HTML("This is the first dialog box."));
dbox2.setWidget(new HTML("This is the second dialog box."));
// Making dobx2 a partner of dbox1 means clicking
// in dbox2 won't cause dbox1 to close
dbox1.addAutoHidePartner(dbox2.getElement());
// Similarly, setting dbox1 as a partner of dbox2 means
// clicking in dbox1 won't cause dbox2 to close
dbox2.addAutoHidePartner(dbox1.getElement());
// Show the dialog boxes
dbox1.show();
dbox2.show();
You can interact with either of the dialog boxes without the other closing. Omit the appropriate call to setAutoHidePartner if you only want a one-way partnership.

Best way to select from a list - aren't the two listboxes getting a little old?

How many times have we seen this type of selector:
List Box Selector http://geekswithblogs.net/images/geekswithblogs_net/dotNETvinz/MoveItemsListBox.jpg
I was just about to start creating this in a WinForms app, when I thought that others may have some ideas for doing this better. We need it to sort - so the right hand list will need up/down buttons. But this seems so old school. I love devexpress components, and was thinking of asking them if they would consider adding a component that handles this functionality with a slick UI.
I am thinking that a graphical representation of the objects, and a graphical representation of the listboxes - that would be a more intuitive way to move items around.
Has anyone seen an open source project like this?
If a CheckListBox won't suffice (and it usually will), then the "modern" approach would be to use a ListView or similar component with a "Transfer" column. Render the button inline in that column, one for each row, so that it only takes one click to move an item from one to the other.
You see this everywhere in Vista, usually with hyperlinks as opposed to buttons. Instead of clicking on an item and then choosing an action, you click the action at the item level.
I wouldn't go overboard with slickness as it can impair functionality, but the dual-listbox screen is definitely old-school.
Also, if there's a very large amount of data to manage, it helps to provide a progressive search at the bottom of one or both lists.
I have done this type of selection using (essentially) a single CheckListBox that displays each item as an image. Part of the image looks like a LED, which is on (bright) if the item is selected or off (dark) if it is not selected.
This works well if you have a reasonable amount of data to select from, and also works well in a multi-column format if you can predict that the options will have reasonably similar lengths.
Allow users to drag items in/out of list 2, and also drag to reorder in list2.
(All items dragged out of list2, and dropped anywhere outside the list, get put back into list 1, in their correct place in the list by alphabetical or natural order.)
You can merge the two list boxes into one with the help of groups (LVGF_GROUPID flag): one group for selected and one for not selected.
You can also implement group membership changes with drag-drop between them. This way single drag-drop can move an item into the other group at the appropriate position, saving most/all of the other buttons.
Additionaly the bottom of each group can have one pseudo item with help text (i.e. "Drag items here to...") that is visible only when relevant.