- PROS: Good design and implementation; 60-day money-back guarantee
- CONS: Some minor glitches with the samples environment; slight delay in updating code samples to Visual Studio 2010
- RATING: 4 out of 5 stars
- PRICE: $899.99 to $2,199.99
- RECOMMENDATION: This product is as good as its marketing hype; try it out!
- CONTACT: DevExpress • 818-844-3383
Once in a while you'll find a product that's as good as its marketing hype. After trying out the DevExpress WinForms set of controls, I believe it's such a product. But what first caught my eye about the DevExpress WinForms controls wasn't the product's marketing. It was the 60-day, no-questions-asked, money-back guarantee. For me, the guarantee set a no-nonsense tone for the product suite right out of the gate.
Here I will share my impressions of the WinForms control suites, after spending a few weeks trying out the controls. Although I don't review every control in the set, my report should help you form a meaningful assessment of the product based on the controls I tested. I expect your mileage will vary.
Checking Out the Samples Environment
After installing the controls, my first task was to try out the simple and effective samples environment. I really like the samples environment's layout because it's designed with the busy professional developer in mind. To try out any of the WinForms control suites, click the suite you're interested in. Doing so launches the corresponding samples environment where you can interact with the controls in that suite.
The only time the suite view comes up short is the scenario where you know the control but not the suite that it belongs to. For instance, if you're looking for the barcode control, it might require a bit more effort to locate it from the samples environment. Also, if you aren't careful to install all the demos, the feature hook will still be on screen but you'll be informed with an error message that the feature is missing because it wasn't installed.
The samples environment also offers the option to create its own test data housed in your SQL Server environment. The test data feature comes in handy if you've butchered your Northwind sample database as I have. I used a mix and match of Northwind and the samples data set in my testing.
As is standard for third-party controls, the DevExpress WinForms controls are fully integrated into the Visual Studio designer and are visible in the Toolbox. You can drag and drop controls within the designer to your heart's content.
Trying Out the Controls
First up on the test harness is the XtraGrid control. The XtraGrid control, functionally equivalent to the DataGridView control in Windows Forms, was wired up to my back-end store. My store consisted of SQL Server 2005 isolated by domain and on a different machine from my test client, a standard production topology. Data hookup was painless using the wizard. I was able to easily create a master-detail application, as Figure 1 shows.
Figure 1: Master-detail application created using the XtraGrid control
The property grid that's shown in Figure 2 and common to all the WinForms suites provides the fine-grained adjustment levers for each control. As you can see in Figure 2, the various options are organized in a Microsoft Outlook-styled view in the left pane.
Figure 2: XtraGrid control's Property Editor
From there, you can quickly navigate to the various properties and settings that appear in the right pane. The experience was pleasant because the layout design didn't get in my way.
By default, the XtraGrid control includes the requisite options, such as indentation, tool tips, and tabs. But many additional options are available for the XtraGrid, such as ribbon bar, XtraGrid zoom, Outlook theming, and layout features.
The XtraGrid uses views to represent data from a bound data source. A view is analogous to a view in model-view-controller (MVC) architecture, where data can be viewed through a different visual window without necessarily changing the data. Views can be flat or hierarchical with varying levels.
Additionally, several alternative views are available, including the GridView, CardView, Banded GridView, and Advanced Banded GridView, shown in Figure 3.
Figure 3: Advanced Banded GridView for XtraGrid control
Banding works well and is a natural way to view data that's logically related. I think of it as a pivot view without the added complexity of a pivot table. That's because the banding imposes a grouping function on the related data. The grid also allows filtering and nesting via the column headers.
Another view, CardView, represents data in card format, which displays fields vertically in a single column. It's not just eye candy, either. Having the control relate the data in some logical way helps you make sense of what is otherwise flat information.
None of these features add up to much if the XtraGrid control doesn't stand behind those features by providing decent performance. So, to evaluate the control's performance, I set out to load and manipulate 100,000 records. I was very pleasantly surprised by the control's performance --so surprised, in fact, that I decided to examine and count the records in the table for myself to verify that all the data was there.
I went digging in the Help files for a performance explanation and found this:
In Instant Feedback mode (asynchronous server mode), a control doesn't freeze, but rather continues responding to a user's actions, while the data is being retrieved by the data source in a background thread...
Although this certainly isn't a new design, the developers actually hit the nail on the head with the implementation. I expected some jerkiness when asynchronous data requests synced up with the main thread view. There was no jerkiness at all; data integration on the main thread was seamless, which made for ultra-smooth scrolling. The implementation is very impressive and makes for a pleasant end-user experience.
The only visible sign of strain I could detect was on the first load of a large data set where I scrolled down extremely quickly as soon as the data started to appear. I'm cheating slightly here by introducing an abnormal load on the main thread that controls the UI responsiveness. However, the signs of strain disappeared as the control warmed to the extreme behavior.
I removed the main index on the SQL Server table to see how that would impact the performance. (Yes, I know, it's not fair.) I could see some signs of the strain manifesting itself on the control-rendering process, but it held up pretty well even so.
That sneaky move also allowed me to observe the control's behavior when sourcing data in bottlenecking scenarios. Would the control's UI struggle to render bits of data? Would it adjust to the connection latency or freeze? As I mentioned, it seemed to hold up pretty well. This result tells me that, without a doubt, the implementation can take credit for the performance. It isn't just the back-end engine making things slick. A finely tuned database engine is just a bonus to the XtraGrid control. Although indexes are preferred, the only requirement is to have a primary key.
As I typically do when testing a software product, I poked around the DevExpress WinForms' Help documentation a lot, especially when I tested the XtraTreeList control. I found the WinForms controls documentation to be thorough and easy to peruse.
I had some issues with the code samples, however. For what it's worth, some of the Visual Studio code solutions vary in different versions of Visual Studio. It's not a big deal really, and it didn't break my stride. Nevertheless, I found it a little inconvenient to wait while the Visual Studio upgrade wizard churned through the samples updating them to Visual Studio 2010 format.
Toying with the large data sets presented me a wonderful opportunity to explore the XtraPivotGrid control. Pivot controls are notoriously difficult to build because they have to work with hierarchical data either at the query level, in the control, or in some combination of the two. Some of the design issues that make this a difficult exercise are the query complexity at one end and the "stateful" weight of the data at the control level.
The code implementation that remains true to that design is another matter entirely. It's quite possible to get the design right but fail to deliver on its implementation. It looks like DevExpress scored a touchdown here -- that is, the implementation and the design make for a very workable control.
The performance of the XtraPivotGrid pivot table was good. The control was able to handle large amounts of data and didn't seem to experience any hesitation while slicing and dicing. Data points were accurate and reachable via keyboard and mouse, an accessibility benefit for sure.
XtraPivotGrid offers the standard variety of functionality that you would expect at this price point. However, it adds more features, such as field visibility, reordering, and resizing to help you better analyze your data.
And here is where XtraPivotGrid stands head and shoulders above the rest: In addition to providing connectivity across a wide variety of back ends such as SQL Server Reporting Services (SSRS) and custom data sources, the XtraPivotGrid control lets you work with data offline. That opens up data analysis to all sorts of mobile and disconnected scenarios.
Figure 4 shows the XtraPivotGrid's end-user pivot aggregation in action.
Figure 4: Pivot aggregation using the XtraPivotGrid control
Aggregation can occur automatically or with custom formulas. Custom aggregation is definitely a value-add and speaks to the control's flexibility. On the down side, I really would prefer to see the XtraPivotGrid reflect changes to the data source automatically without requiring coding. That feature is available in Microsoft's incarnation of the PivotView object (a close relative of the Pivot Table), and it should be here as well at this price point.
Some of the non-functional requirements that I looked at, such as scalability, reliability, security, and performance, are OK in my opinion. Even so, there's some work to be done on accessibility --most notably with support for high-contrast (HC) mode. In Figure 5, you can see that Internet Explorer (IE) in the background, which serves as my control experiment, shows my HC mode adjustments.
Figure 5: High-contrast-mode variations between XtraGridView control and IE
However, although the XtraGridView in the foreground captures the system-level HC event via the progress bar message, the final result doesn't reflect a similar HC adaptation to the IE window. Other controls such as the XtraTreeList control didn't even hook the HC event.
A Value-Add Proposition
All in all, I really like how the DevExpress WinForms controls are implemented. The end result is a suite that works because it is
- powerful yet appropriate to the task at hand
- potent without cramping the developer
- easy to use without being oversimplified
The DevExpress WinForms product comprises quite a large collection of controls, and the functional surface area they cover is impressive. And even with the extensive coverage, the deliverables don't leak quality at the edges. The suite exudes simplicity and aesthetic appeal at every turn.
Alvin Bruney is a longtime ASP.NET MVP and author of five books. His current book, ASP.NET 4 by Example, is currently available for $20.