Thanks for the responses... That's good to know about Text() on the comboboxes. I've been doing it the other way, as well.
I'm not sure if there's any weirdness related to having the 0-width column because I always do fullrowselect. I've thought about the shadow array idea before and it is probably the best way to go. One of the benefits to having the hidden field is that I can expand it when debugging my code, but that doesn't seem to be a good reason to design the wrapper in that manner. Now that I think about it, the array would probably be best for consistency, since there's nowhere to hide a key field in the comboboxes. I'm not exactly sure how I would like to implement this either. It would be cool to be able to do something like: # get some data $sth = $dbh->prepare('select person_id, first_name, last_name from people'); ... # call a method to assign ids and populate the LV. # if called without a key field it could # automagically assign ids $lv_wrapper->populate($sth->fetchall_hashref, 'person_id'); # suppose we have a button to remove items # from the LV btnRemove_Click { $id = $lv_wrapper->id(); $lv_wrapper->remove($id); return 1; } The neat thing about the hashref idea is that columns could be named just by setting the AS params in the sql and everything would be taken care of. This is a decent model for when I'm building gui elements from a DB, but it doesn't really match up to situations where I build elements from an array of objects. Any opinions? -Ariel