How to put
a Calculated field onto a Grid
by Peter Rorlick (the author is a co-founder of Montreal Business Software. He has been developing xbase solutions since 1981).

HERE’S a step-by-step example of how to create a calculated field and how to get that field to show up on a grid. (Note: a similar technique can be used to get calculated fields onto reports.)

Begin designing a new form. Using the Navigator, switch to the`\Samples\Fleet\Tables` directory. Click on the Tables tab and drag and drop `Aircraft.dbf` onto your form. This will create a query object on the form, called `Aircraft1`.

Using the Inspector, go the Events tab for the query object and click on the tool button of the `onOpen` event.

In the function called Aircraft1_onOpen, type:

| `oField=new Field()` `oField.FieldName := "Make and model"` `This.Rowset.Fields.Add(oField)` `oField.BeforeGetValue := {; Return Trim(This.Parent["Make"].Value) + space(1) + This.Parent["Model"].Value }`

You have just instructed the query to add a calculated field, showing Make and Model in a single column.

Note that you can sometimes create calculated fields more simply, in the SQL `SELECT...FROM...` statement. But the way we’re doing it here is much more powerful, because the`.BeforeGetValue` is handled by VdB rather than by the SQL engine. This means that you can use xbase functions and UDFs to construct your calculated fields — and this is a vital difference. SQL is nice but it is sometimes not flexible enough.

From the Component Palette, drop a grid onto the form, and enlarge it. Select the grid, and using the Inspector, click on the dropdown button of the `DataLink` property, and set it to `Aircraft1`.

As soon as you do this, you’ll notice that the grid becomes populated with rows from the table.

Now, our goal is to get the calculated field onto the grid. To do this you will need to run the query again so that "Make and model" will be available in the Column Selector tool. Unfortunately, if you try to set the query’s `active` property to `false` and then back to `true`, you’ll get an error. But you can effectively run the query again by saving the form (call it `MyGrid.WFM`) and then open it again with the designer. Once you have done that, click on the grid, bring up the inspector, and click on the tool button of the `Columns` property. Double-click on the "Make and model" field, and then double-click on the "Layout Image" field. Click on the OK button.

Save the form and run it. Voilà!