views:

132

answers:

6

Say I have a report that can be restricted by specifying some value in a dropdown. This dropdown list references a table with > 30,000 records. I don't think this would be feasible to populate a dropdown with! So, what is the best way to provide the user the ability to select a value given this situation? These values do not really have categories and even if I subdivided (by having some nesting dropdown situation) by the first letter of the value, that may still leave a few thousand entries.

What's the best way to deal with this?

+3  A: 

I really wouldn't have a 30,000 element drop-down. The GUI is supposed to make it easier on the user rather than harder.

If you have no other way to categorise the data other than alphabetically, you're not restricted to using a two-stage approach with just the first character. Make it reliant on the first two characters.

This would give you at most 676 (assuming alphas only) in the first drop-down and (on average) 44 in the second.

We've actually taken two approaches to this problem. BIRT (which we use) allows for cascading parameters which can easily run that second-level query whenever you change the first drop-down box.

However, some of our customers care absolutely zero for nice GUI stuff (other than the output of nice 9-point Verdana and beautiful charts to placate management, of course). They prefer a free-form text entry field where they can just type in "SYS_PAX_%" to change their queries.

Of course, these are the customers that know exactly what data is in their database and use values which lend themselves to categorisation with SQL LIKE clauses. Others prefer the ability to search.

paxdiablo
+5  A: 

Search, don't categorise.

You can display the control as a simple text box, and when the user types in a few characters, you could pop up an autocomplete-like dropdown to select the final value. Here's a link to the jQuery plugin for autocomplete.

Dean Harding
beat me as i was typing. :)
griegs
Bingo. Hit it right on the nose +1
JohnFx
Actually, this is a better solution than mine if you can do it. We can't unfortunately but it appears to be possible for the questioner's environment.
paxdiablo
An autocomplete textbox is really the best way to handle this. +1
Chris
A: 

+1 @pax. Still i'd like to see a 30K dropdown! :)

@JustAProgrammer, perhaps you could do a text box where people can type in the beginning of what they are looking for and you can filter as they type in.

griegs
A: 

If you're asking from a performance perspective rather than a usability perspective I would consider using a live-list approach that loads only a subset of the list items on demand as you scroll up or down. If the user clicks down the list quickly, to say the middle, it will load another 10 elements corresponding to that position. Both render time and load time will be much faster.

Like paging, but 'fluid'.

Michael Shimmins
A: 

Auto complete drop down as suggested above is best to have. But it will require the users to have some idea about the type of entries to start with. If the users are familiar with data, go for it.

Alternatively, if you can categorize your data, then you can start with the categories first and then based on the selection you can populate the dependent drop down with actual values which will be a subset of original values.

Nrj
A: 

I had this same question about 2 years ago concerning a asp.net dropdown box.

Trust me, don't even try it. Use the auto complete suggestions above. I've found that displaying anything above 5000 records tends to crash the browser.

Just my 2 cents.

Richard M