views:

91

answers:

9

Suppose I have a list of a couple of thousand organizations and a user needs to be able to select one of them. The list is too large to populate in a dropdown at page load, and the user often knows what they want but it's not the first part of the organization name. That is, they know "Collections" but not that the precise name of the organization is "Department of Collections". So the user will need/want to type in some information.

It's easy enough to use an autocompleting textbox of some kind, but I don't want to allow the user to type in random text - they have to choose one of the organizations explicitly.

What's the best solution?

A: 

You could use a CustomValidator to ensure that the TextBoxes content in contained in your collection.

Jens
I could, but I would rather force the user to select an existing item. It seems silly to show a validation message when there's a known list to pick from.
Ben Fulton
A: 

You could use the Ajax AutoComplete Control: http://www.asp.net/ajax/ajaxcontroltoolkit/Samples/AutoComplete/AutoComplete.aspx. You can opt to only do a lookup if the user has typed in a certain number of characters.

You'd create a static Web Method to query the collection (you could use LINQ) and return matching organizations.

You'd obviously need to validate the textbox input afterwards.

David Neale
A: 

Is it possible to structure your list a bit more like a tree, so that it is not a single list. E.g. Could you have a grouping like "Government Depts" and then add Dept of Collections to that. Then ask you users to first select the top level grouping then show them a shorter lists of organizations in that group?

Steve Haigh
That could be done, but it requires a lot more cognitive effort from the user to realize that Collections is a Goverment Department. I really want to allow them to type "Collections" when they know that's what they want and not have to muck around with categories.
Ben Fulton
A: 

It sounds to me as if your data list should really be in either a database or at least stored well away from the UI. Wherever its really stored, place a keyword for each entry, say "Collection". The list of keywords could be available as part of your auto-complete functionality. Then search on the keyword alone.

ChrisBD
The list can be searched quickly - that's not an issue. The issue is forcing the user to select something from the list.
Ben Fulton
@Ben - I never said anything about performance. My intention was to point out that presenting the user with " a couple of thousand" entries is not user friendly. Something that you must realise, else you wouldn't be asking the current question. I would still stand by providing a keyword list for searches/autoreplace, even if it's not visible.
ChrisBD
Yes, that's the problem I'm trying to get around. I'm happy to allow the user to type a couple of letters, though, and simply filter the list by the entries that contain those letters as a substring.
Ben Fulton
A: 

If you could divide items in categories, would using some kind of tree control help?

So, when user clicks on a node you load only items in that node. And so on.

+1  A: 

IMO I will simplify the UI to:

  • a textbox to enter the string
  • a drop down to set the filter options like: "contains | starts with | ends with"
  • a button "Find"

Then, I will populate a view based on the search string & let the user choose the valid item or refine the search

IMO with something like an auto-complete, you will end up writing a lot of parsing code to get to the string & then there might be server-side load considerations...

HTH.

In additional check if 'facetted navigation' is something you need. Ref.: http://www.alistapart.com/articles/design-patterns-faceted-navigation/

Sunny
A: 

I'd break it into two paths...

Use an autocompleting textbox, for the person who types the correct title (i.e., Department of Collections); and a separate search button to search for possible matches. The search button would take you to a results page to select the desired choice. This functionality would be similar to the way search on MSDN works.

JohnKeller
A: 

Initially a tree view sounds cool, but are you certain that a single classification will reduce the data into manageable sets? If 80% of your data gets classified as "government dept" this doesn't really help things.

The problem is you want criteria that allows users to quickly split a large list into smaller sets that are easier to consume. Additionally, there should be enough flexibility to react to changes in data.

I'd suggest using a tagging pattern like iTunes. In my library "rock" describes 80% of my collection - but is still a useful categorization for something like random shuffle. I also have the ability to stack tags so I can use genre="rock", decade="1990" and quickly sift my data down to whatever is of interest.

In the UI, I'd recommend a section that allows the user to apply "filters" which is nothing more than selecting specific values for tags. Break the list out into pages and allow them to see a tally of potential matches.

Scenerio: - Navigate to screeen XYZ and see there are 10,000 companies to pick from - Click "classification" and select "Government dept" and the list updates to indicate there are now 1,000. - Click "region" and select "South" and see my list drop to 200. - Sort list by name and then select (or scroll through, whatever)

AndyN
+1  A: 

So it seems to me your main challenges are to

  1. Express that the user needs to select an organization from the list (and only from the list).
  2. Express that there are a lot of organizations on the list.
  3. Provide some means for the user to quickly find the organization on the list.

I would say present a selector control that fits in with the rest of your design with a search box just above it. You should then page the list as there will be lots of pages with that many elements indicating that the user should definitely use the search. The search essentially acts like the auto complete, but instead of the found options changing the text, it will change the contents of the paginated list. If you do this on a character by character basis (or throttle using Reactive Extensions), it's very clear that you're just filtering the list to make selection easier.

Joel