title: Designing an autocomplete system to choose an instance of an aggregate type
body: <p>An aggregate type T is made up of 4 strings: t = c1 c2 c3 c4</p>
  
  <p>Each of c1 c2 c3 c4 can have a number of unique values:</p>
  
  <ul>
  <li>c1 may have a number of unique values c1.1, c1.2, c1.3, ... c1.n, where 'n' can be fairly high, about 30,000.</li>
  <li>c2 has far fewer unique values, no more than 5, i.e., n &lt; 5</li>
  <li>For c3 and c4, n is unpredictable but generally 10 &lt; n &lt; 100.</li>
  </ul>
  
  <p>There are a number of instances of type T, about 200,000 -- all composed of different values of c1 c2 c3 c4.</p>
  
  <pre>
      t1 = c1.1 c2.1 c3.1 c4.1
      t2 = c1.2 c2.1 c3.2 c4.2
      t3 = c1.3 c2.2 c3.2 c4.3
      ...
      tN = c1.n c2.n c3.n c4.n
  </pre>
  
  <p>The goal is to allow the user to select a single valid instance of type T. Currently the (C# Winforms .NET 2.0) UI shows 4 autocomplete dropdowns with unique values for c1 c2 c3 c4 in each. Once a single valid instance is selected, it's fed to an external system as input. The advantage of the current UI is that it is was quick to come up with (given this is a v1.0 release) and reasonably fast -- Winforms' standard autocomplete dropdown doesn't seem to have a problem with 30k unique items and the user can quickly select a set of four values.</p>
  
  <p>The problem with this is that while it does allow the user to quickly type what they need, the autocomplete does not help users find suitable  have no idea whether the <em>combination of values</em> they have chosen matches an existing, valid object. For experienced users this mostly isn't a probem; however new users keep ending up choosing values of c1 c2 c3 c4 which don't actually result in a valid instance of type T.</p>
  
  <p>My question is: is there any other way I could build a UI for entering T, so that users could have the benefit of autocomplete (I really want to avoid picklist-style interfaces, they're much slower for entering data) while at the same time allowing new users to choose valid combinations of values?</p>
  
  <p>Although the original implementation is .NET based, I'd be happy to hear about solutions in any other platforms. My question is really about designing a more efficient UI, not about specific platforms.</p>
  
  <p><em>Edited to clarify:</em> algorithmic (i.e., non-UI) suggestions are also welcome.</p>