Ben Fulton
Ben Fulton

Reputation: 3998

Selecting an item from a very large list

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?

Upvotes: 4

Views: 1976

Answers (9)

Joel
Joel

Reputation: 300

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.

Upvotes: 1

AndyN
AndyN

Reputation: 1

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)

Upvotes: 0

JohnKeller
JohnKeller

Reputation: 419

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.

Upvotes: 0

Sunny
Sunny

Reputation: 6346

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/

Upvotes: 2

user218447
user218447

Reputation: 659

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.

Upvotes: 0

ChrisBD
ChrisBD

Reputation: 9209

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.

Upvotes: 0

Steve
Steve

Reputation: 8511

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?

Upvotes: 0

David Neale
David Neale

Reputation: 17038

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.

Upvotes: 0

Jens
Jens

Reputation: 25583

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

Upvotes: 0

Related Questions