Skip navigation.

Syndicate

Syndicate content

User login

Using Developer Express UI widgets

Lately I’ve been stuck doing GUI development at work. If you’re not a systems programmer, it’s probably hard for you to understand how degrading UI work is for me, but it’s roughly equivalent to a lawyer cleaning toilets, or a doctor doing TPS reports.

To make this process suck minimally, my company licensed the Developer Express DXperience toolkit. The toolkit includes WinForms, ASP.NET, and ActiveX components, but we’re only using WinForms.

In my tenure at BearingPoint I’d used a heavily customized earlier version of DevExpress’s XtraGrid control, but they’ve come along way since then, and I’m using more controls now.

In general, my impression of GUI development is that it sucks as much as any other GUI development task I’ve undertaken. The toolkits are always more complex than you’d like, and at the same time less flexible than they should be. Threading issues are the rule rather than the exception, and nothing works quite as it should.

Thus far I’ve posted nearly a dozen support issues to the DevExpress support system. One is a confirmed bug which remains outstanding, a few were basically RTFM responses pointing me to the solution I was too stupid/lazy/non-psychic to find myself, and most were along these lines:

Thank you for your question. Though what you’re asking is a basic bit of functionality which one could reasonably expect from any commercial toolkit worth its salt, there’s no easy way to do it with the current version. We’ll add your request to the ‘No Fucking Way’ feature queue. In the mean time, here’s a nasty hack that uses reflection and write-only VB code to achieve sort of what you want, but it will only work in the attached test harness, and not in the real world. Thanks for using DevExpress. Sucker.

I’m not ragging on DevExpress specifically. There’s just something about modern UI programming that is intrinsically hard, not in the ‘NP hard’ sense, but in the ‘factor this 100-bit binary polynomial in your head while I slap you repeatedly with this dead fish’ sense; that is to say, complex, hard to hold in your head, and rife with concentration-breaking distractions.

Case in point: right now I’m trying to get some temporal data from our product into a calendar-type view, using DevExpress’s XtraScheduler control (yes, they all start with ‘Xtra’; it’s called ‘branding’). Ostensibly, this is as easy as building an IBindingList-drived list of objects with certain properties like Start and End. Indeed, I whipped up a working prototype using dummy objects in mere seconds.

And yet, as with so many things, once I moved it to the real app, it stopped working. I add objects to the list, the list ListChanged event fires (filtered through a wrapper to fire the event on the UI thread, which I had to write because XtraScheduler is too stupid/lazy to check the thread a change notice comes in on, but I digress), and the control’s count of schedule items increments, but it never touches the Start/End properties, and just builds up a list of events starting 1 January AD 0, (incidentally, wasn’t that the first Christmas day?), without displaying fuck all.

I could post something in the DevExpress forum, but since my test app works fine, I’d have to come up with another test app to reproduce the problem, and if I knew the problem well enough to reproduce it, I’d probably be able to solve it on my own. If I try to describe the problem w/o a sample project, they’ll not understand me and ask for a sample project.

So, here I am, sifting though the XtraScheduler innards on a Saturday night, when all the cool programmers are debugging kernel modules or attaching TCP/IP stacks to robotic litter boxes. sigh