Expertsystemen

 

Forcing one or more rows on an otherwise empty grid

When you have an empty grid in your model, upon which your end users can add (or remove) rows, it can sometimes be useful to automatically generate one or more rows. In this tutorial, you will learn how to force just that.

Visual example of the issue

A dynamic grid without automatically generating rows
A dynamic grid without automatically generating rows
A dynamic grid with an automatically generated row
A dynamic grid with an automatically generated row

TL;DR

Basically, in the model you have to force iteration(s) of the grid using empty value(s). That way the grid will first show with empty row(s), instead of nothing. You should also check whether the grid has already had input added or not before forcing iterations.

All steps

For the sake of example, I have declared ‘gridvar’ in my node

dataset
  gridvar: grid;

which is a reference to the ‘grid’ graph.

graph grid;
begin
  node start;
  var
    data1,
    data2,
    data3;
  begin
    data1 := '';
    data2 := '';
    data3 := '';
  end;
end;

In the node containing gridvar, we need to first evaluate the content of this grid as it is at the moment the end user arrives there - since we have no way of knowing whether they have arrived at this node for the first time or are simply returning, having already filled data into the grid.

To do this, we will add a function in the action of that node:

gridvar := editedvalue(^gridvar)
checking the edited value
checking the edited value

Now we can perform a simple check on the gridvar to see if there has been any input from the end user, just by using the count() function as a conditional test.

Based on the outcome of this test, we can logically decide whether or not to add empty rows.

Here’s how we achieve that:

conditionally iterating over the grid
conditionally iterating over the grid

As you can see, if the count(gridvar) returns anything more than ‘0’, we know the end user has already filled in some data, so we do nothing. If however the return is ‘0’, we can safely assume the end user has not yet filled in any data, and we can therefore add the desired number of empty rows by forcing that number of iterations on the grid.

In the example above, we only iterate once, with:

gridvar[0].start.data1 := '';

If you wanted three empty rows, you could do this:

gridvar[0].start.data1 := '';
gridvar[1].start.data1 := '';
gridvar[2].start.data1 := '';

Broken down:

gridvar is the reference to the grid graph.

[0|1|2] is the iteration number, always zero-indexed (beginning at 0).

.start is the grid graph’s node which contains the data, or in this case the blank references to the usable variables for the grid.

.data1 is one of the usable variables, as defined in the node: grid.start.

:= ''; assigns an empty string to the data1 for this iteration.

The fact that we used data1 in this case is at random. You could use any available variable in the grid graph’s start node. The rest of the fields called in the grid will be also be empty.

In the end, your actions in that node should look like this:

actions snapshot
actions snapshot