While putting together a VB program to quiz my 9-year-old on his Spanish vocabulary words, I discovered to my chagrin that I no longer had any decent grid controls in my library… in fact the whole control library was gone. I’m ashamed to admit that a recent disk reformat on my home machine had wiped out all traces, and I didn’t have a decent backup. Some role model I am, huh? So I went looking for an ActiveX grid control that supported unbound, in-cell editing and that would fit my budget, which meant—roughly—free, give or take a few cents.
While poking around on Download.com, I ran across something with the unlikely name of BeeGrid. I downloaded the unlimited-use free edition and was pleasantly surprised with what I found. BeeGrid has since been purchased by Data Dynamics and renamed #Grid (SharpGrid), and that unlimited free version has now become a 30-day timed trial. But that doesn’t change the fact that this is a first-class data grid control with a list of features that stacks up favorably against many other grid controls I’ve seen available.
As I’ve already mentioned, I was looking specifically for a grid that supported in-cell editing when in unbound mode, and #Grid fits that bill nicely. The underlying object model is well thought-out and not overdone, despite the fact that there are around 30 objects and collections to deal with. In unbound mode, #Grid is easy to work with; I never once felt like I was fighting to get something accomplished.
Of course, there’s more to #Grid than just the unbound mode. It can also run in several other modes: bound to an OLE-DB or ICursor data source, or in one of two “Virtual” modes. The control’s virtual modes turn over the layout, formatting, and data population of the control to the programmer, who may either use #Grid’s object model or handle events raised by the control to populate the grid.
While in OLE-DB bound mode, #Grid is capable of retrieving column information from a data source at design time, automatically configuring itself to display all available columns, even Binary Large Object columns. While bound, the grid is responsive, even while dealing with several hundred records of data.
Strong feature list
#Grid sports some whiz-bang grouping features that are available in all of its data modes. Outlook-style grouping can be accomplished under the control of the programmer or by use of the standard “drag a column here to group by it” bar. Hierarchical tree-style grouping is available as well and includes support for calculated headers and footers. In both grouping scenarios, child rows can be programmatically traversed using #Grid’s object model.
The grid’s filtering features are robust, although a little convoluted at first blush. You build individual filter objects representing the filter operation you want carried out, and add them one at a time to the grid’s filters collection. Then, you apply the filters via a method call. The neat part of this system is that you don’t necessarily have to hide filtered records. You can instead apply a special formatting style to make them stand out from their unfiltered counterparts if you so desire.
If you prefer a little more sizzle with your steak, #Grid has some eye candy features as well. For instance, alpha-blended backgrounds are possible if you simply must have them, as you can see in Figure A.
|Yes, #Grid supports alpha-blended backgrounds.|
Interestingly enough, alpha blending didn’t seem to exact much of a performance penalty. There’s also a strong and flexible custom drawing model you can use to interrupt and override part or all of the grid’s painting cycle.
Data Dynamics, which is known for its reporting components, has added some nice, new reporting features to the control since acquiring it in February of this year. A new Excel-format export and a print and print preview control are both welcome new additions to the grid’s functionality.
Worth a look
Whether you happen to be looking for just a basic grid control to display your data, or a full-featured grid that can become the centerpiece for an application and grow as it does, #Grid is worth checking out.