With my previous job and my current one, I’ve had the chance to work with sets of third party controls from two of the major players in the Microsoft .Net arena. At my previous job, we used the DevExpress DXperience control suite, and at my current job we use the Infragistics NetAdvantage control suite. They both provide a lot of functionality beyond the in-the-box controls from Microsoft, and each suite has its advantages and disadvantages. To be honest, I had a part in selecting DevExpress at my previous job, and I had nothing to do with selecting Infragistics where I am now, just in case that influences my opinion in any way.

Comparing the two suites, I find the object model for DevExpress to be laid out a little more clearly. Infragistics seems to use more layers of inheritance and lacks a bit of consistency in their hierarchy from one control to the next. For example, Infragistics has a set of calendar controls that provide a month view, a week view, and a single day view. If you get a reference to a UI element representing an appointment, you can link directly to the associated appointment object with an “appointment” property from the month view or the week view, but not from the day view. That doesn’t make sense to me at all. I can understand that deeper layers of inheritance can possibly be useful if you are deriving a lot of your own classes from parts of the third party controls, so it’s not inherently a bad thing, but I personally prefer the simpler structure that DevExpress uses.

In almost every situation I have come across, the DevExpress controls seem to perform noticeably more quickly than the Infragistics controls. I see that mainly when you are dealing with a lot of data, such as loading up a grid or treeview with a lot of information. The difference is less noticeable with small amounts of data, but I think it is still there. This is a big issue for me, and the speed of the DevExpress components is one of the primary reasons we selected them at my previous job. When we were trying various controls sets, we had a large set of sample data that we loaded up into each control we tested, and the DevExpress controls were the only ones we found that were consistently as fast or faster than the Microsoft controls. That’s a big plus in my book.

One disadvantage with the DevExpress controls is that we found more bugs in them than I have found with the Infragistics controls. Most of them had to do with crashes deep in the .Net framework during various paint routines, where some referenced object was null or something like that. On the flip side of the coin, in my experience DevExpress was very quick to fix errors once we reported them (though occasionally we had to provide sample applications that caused the crash, they didn’t always require that). They have a very regular schedule for releasing updates (monthly) and if we reported an error at least a week or a week and a half before the next release, they almost always got our fix in. The one bug I filed with Infragistics took a little longer to fix, and their release schedule is less regular, so even when they tell you they fixed the issue, you still don’t know when the fix will actually be available to you, which is a little frustrating.

Related to bugs is the issue of feature requests. We asked DevExpress for several things to be added that we thought would be useful to us, and for the majority of the requests, they were happy to make the changes we asked for. On the other hand, if you look through the forums or knowledge base at Infragistics, you will see the same response over and over again: “our control works that way because that’s how Microsoft’s control works.” I really, really don’t like that response. It’s great to have a control that works just like Microsoft’s if you are trying to duplicate Microsoft applications exactly, but most people aren’t. I think most people buy third-party controls for the additional customization they can provide, and if requests for reasonable customization are frequently turned down because Microsoft doesn’t offer that customization, then why would you buy the third-party controls in the first place? I like the attitude at DevExpress a lot better.

As far as using the controls themselves and setting their properties and all of that, I think that the DevExpress controls are a bit easier to use, but perhaps slightly less powerful. I think the Infragistics controls directly expose a few more properties (which you would have to set in code using the DevExpress controls), but on the other hand, some of their visual designers are terrible. Specifically, the grid layout designer is one of the worst I have ever seen. You are supposed to be able to drag columns around to reorder or resize them at design time, but very frequently resizing one column will cause other columns (that you did not touch in any way) to resize by a few pixels. Why in the world does that happen? It’s incredibly frustrating when you are trying to resize several columns to the same width, and each time you adjust one is messes up the other that you have already set.

Both control suites provide a great deal of customization for the look and feel of the controls, way more than you can easily do with the Microsoft controls. That was a big selling point for us at my last job with the DevExpress controls. We wanted a straightforward way to get away from the default dull gray look of the Microsoft components, and DevExpress really provided that for us. As far as I can tell you can do the same things with the Infragistics controls, but I’ve spent more time on that with DevExpress, so I’m just used to the way they do things.

So overall I probably prefer the DevExpress controls. That’s not to say that the Infragistics controls are bad (except for the grid layout designer), because they aren’t. They just seem to have a less straightforward class hierarchy, they tend to run slower than the DevExpress controls (at least in my experience with large data sets), and I haven’t been as impressed with their customer support. On the other hand, the Infragistics controls seem to be more stable and I’ve found fewer bugs and quirks with them than I did with the DevExpress controls. So it all comes down to trade-offs regarding what’s most important to you. I think either of them are a great step above the in-the-box components from Microsoft.