Will there be a datagrid in 2022?

The posts I see about this are years old. But just recently, a YouTube video showed up mentioning a “Coming Soon” Xojo datagrid control.

it seems strange for searches to just come up with that video and not find any textual announcements.
Is that new control real (as in “exists” rather than “only integer”)?

I do know, from early posts, that there are 3rd party solutions.

It was in the Xojo Developer Retreat.

Which was only a day or so ago. Will it be this year, it’s not certain.

Number 6 in the Roadmap: Roadmap — Xojo documentation

I’m (almost) sure we will not see it in 2022.

Edit: from the XDC2022 thread:

Grid control is at prototype stage.

I agree, this is almost certainly a 2023 thing. However, the venerable ListBox is much more powerful than many people think. If you tell us more about what you’re wanting to achieve, maybe we can advise better.


You don’t say… :wink:



What is a grid, what’s it for, and in which ways will it be better than a listbox, if any?

I guess it let you embed containers inside cells, so you are free to put whatever you like in each cells that is not possible with the current listbox (buttons, sliders, multiple controls, date picker, etc)

Ah, thanks. That would certainly be very useful.

Let’s first see, then believe. We heard before we would get something “coming soon” as usefull as it may be.

When I started working with Xojo I was baffled as I could not find a grid control of any kind. ListBoxes are supposed to be simple lists, typically, a column or two used for picking a value. I did not expect DesktopListBox to have been extended into a pretty capable grid.

There are a lot of things like that in Xojo, that seem to have evolved over time in ways you would not expect, coming from other environments.

So to me a grid is a multicolumn view of row/column data, much like what a listbox can be used for, but the listbox is missing a few things I typically see in datagrid controls:

  1. Built in sort functionality allowing multiple columns to be sorted
  2. Built in filtering functionality, typically allowing a couple of search values to be ORed or ANDed together for each column.
  3. Often some kind of binding mechanism where you can bind the grid to a DB table or view by just dragging same onto the control from some kind of DB view.

Personally I would consider 1 and 2 of highest priority and at this point I’m not sure why one wouldn’t simply extend the listbox with those capabilities rather than come up with a whole new control. Because then you’d have two fairly complex controls to maintain and no clear guidance on when one would use one vs the other. You’d almost have to deprecate the listbox advanced features or something. Seems awkward to me.

I can’t see how 1 or 2 can be done in a generic way. It all depends upon the source of your data. If it’s a database source then SQL would be fine. However, if it is arrays then that won’t work.

I’ve no interest in a grid that requires a database to sit behind it, no matter what it would be capable of. It’s simply not useful to me. I can see there would be great demand for such a thing though.

Personally, I wanted a grid that didn’t suffer the same problems I always encounter with just about every grid I’ve ever tried to use. I don’t want to have to load all my data into it. I certainly didn’t want to have to hold my data in memory or a database table and then have yet another copy holding string versions of that data inside a grid control.

Because of that I built my own grid control. It is completely virtual. It doesn’t store any data, but instead calls a event of the control to obtain the data for each cell, and others for header rows and columns. These events return the string format of the element in question, which is then displayed and then thrown away. On the next repaint it calls again. It sounds like it would be slow but it isn’t and when you consider that a dataset of 100 columns and 1.8 million rows only requests the columns and rows that are visible on screen at any one paint, it makes an awful lot of sense. Loading all 180 million datapoints into a grid would be a significant drag on performance.

A DataGrid should be a RAD version of a listbox. Design its columns and cells linking its contents to DataSources, so, when a data changes its visual representation will also. A cell can be set as a complex view as a container (like a checkbox + a label + a image, for example, AKA Data Template) that consumes some bound DataSource. The data source can be diverse, a DB Query, a DB Table, A XML file, a XML string, a CSV file, etc. You could be able to design complex tables with many visual features, just dragging and dropping and setting properties and when you run it (in some IDEs it can be live, not needing to run) you will see it showing the data as you designed without any complex coding.
Yes, complex coding can be added, responding to events, etc. But for some tasks it will be just setting a property to a SQL command and enabling the DataGrid to load the data as necessary and it will show it how it was previously set. And also yes, we should not need to load the entire DataSet into the memory and it should be a “Window” to the data that can load it as you go, specially if the DB allows server side cursors. The datagrid should be smart to know how query the data to show and to change (if not read-only the data in the database/datasource)
There’s so much to be done for such control that I think that they need to design the v1.0 very carefully, study what others did, plan a complex full featured one, plan steps, and release such features in an incremental way.

You can very easily make it sort any way you want with the CompareRows event (whatever it’s named these days) with only a little code


My use is just for play in making cipher-solving aid for some types of transformation ciphers. A transformation cipher is one where the actual text letters are presented but their order is scrambled by some scheme. For example, In a complete columnar scheme, the letters fill a rectangular box of x rows by y columns. The rows are fixed but by switching the columns around, the message appears. To add spice, an incomplete columnar is somewhat the same except some - and you don’t know which - columns have x letters and some have x+1 letters. In that case, the grid has to allow you to swap the columns around and also to “slide” the content of cells in any particular column up or down in the rows, independent of other rows. Viewed horizontally, it would be like having a ten element array but containing only 7 contiguous numbers that might start in cell 1, 2, 3 or 4) So you’d need the ability to click on the column and side the content up or down.

Another is called a Grille Cipher, That’s the old style where you have a piece of paper with a square of letters on it. You have another piece of decipherment paper that’s the same size square but it has holes punched in it. You lay the hole on top of the letter square and the message letters appear in the holes. You copy them out, then rotate the hole paper 90 degrees and copy out the next appearing letters, then rotate again and once more, each time getting more message letters. The game is, you don’t have the decipherment sheet with the holes.

I wrote a solving aid in Future Basic that was nicely tricked out. As you guess a letter, that’s like assuming a hole in your deciphering sheet. So picking one letter also “picks” three others that would be visible as the deciphering sheet was rotated. In my aid, clicking on one letter in the square grid, selected it that was indicated by putting a circle around the letter inside the cell, AND, putting a diagonal line through the other three letters that the rotation would select. In other words, for any specific letter you guess, you are also picking 3 others so they are eliminated as potential “selection” candidates.

Now, what if you want to change your guess? Like if one of the lined-out letters doesn’t work in the partial message solution. If I clicked on the lined-out letter, it would blink (blink was a native text action in FB) the original selected letter that caused the lined-out letter to be implicitly selected. Clicking on the original (circled) letter, unselected it, removed its circle indication, removed the diagonal strike-out from its three siblings, and removed their text contribution from the partial message solution. In other words, an “undo”.

The square was displayed in four different orientations - equivalent to seeing the original cipher with the four rotations of the deciphering sheet. That can be a lot of screen real estate. But you kind of have to view it that way because you “see” things in each of the 4 different orientations and little correct guesses converge to a solution. I can’t imagine it would work as well if I had just one grid and was able to rotate it. You’d have to keep more “in your head” vs seeing all four rotations together.

So my needs have nothing to do with displaying pulled data from a database. It’s more filling the grid, column by column or row by row from a block of text characters and then being able to swap (click and drag) individual columns around. Or click and drag to slide the contents of individual columns up and down. And the ability to change the text content of individual cells with circles, diagonal strike-throughs, and blinking. I suppose I could replace the circle and diagonal strike-through with different background color (or use a more common horizontal strike-through). I didn’t have a color option with the PB-180. Blinking the letter was kind of neat. I supposed I’d have to do that now by flipping the color of the text from its original to the background color of the cell in a loop triggered by Key Down?

You guys have a lot of wishes for such a control.

Be aware that when the grid control comes, it will be a minimal viable product. It will certainly not fulfill all your wishes, but only a smaller subset. While you don’t know whether it will show up in 2023, you can expect that the first release will not be perfect and a few Xojo release may be needed to fix bugs.

And once it is in a mature state, you may decide to use it. And compare against what others have, like Björn’s or Anthony’s controls.

1 Like

As I said. Make a good project full featured, release the MVP for it and do incremental releases after until full featured. As it was planned, it won’t break previous code.

Keep in mind Easy Database Connectivity has been in the top 10 for a really long time.

1 Like
Order Item Description
6 Grid Control A flexible grid control with row/column styling and more.
7 Easy Database Connectivity The ability to quickly connect database tables to your app’s user interface and get data in and out.

I think the order should be inverted, as the DataGrid probably will use the new data abstractions as part of its Data Sources.

From what I’ve seen, minimal Viable product typically means very minimally usable product AT BEST.

That concept is the bane of software users because it usually means the product not really real world usable yet for anything significant IMO…

  • Karen

This is a contradiction. MVP is a minimal USABLE product. It covers MOST use cases, not ALL, not with all desired features, but satisfactorily usable for many.