Managing Rows in a Data Source
Once a data source gadget has been defined and gadgets have been connected to it, the row management member functions of the data source can be used. These row management functions differ from the IliTable row management functions in that they are based on the concept of a current row. Changing the current row of a data source has a direct result on the user interface. The IliTable row management functions should be used when you want to manage rows without changing the current row in the user interface. Changing the current row means moving to another row. With regard to editing the values in a row (current or not), the user interface is updated in both cases. See Managing Rows in a Table.
From the end user’s point of view, Data Access provides an gadget that connects to a data source. With this gadget, the end user can perform actions on the data source.
An IliDbNavigator Gadget and the API Member Functions that It Calls
Each button in the IliDbNavigator calls the corresponding member functions in IliDataSource directly.
If the table object managed by the data source is a two-tier table
The “goto” set of member functions enable you to move the current row of the data source. You can move to any row using the gotoPrevious
When the current row of a data source changes, the value displayed by any gadget connected to the data source (for example, entry fields), is automatically adjusted.
If you want to modify a row in the underlying table of a data source, you can proceed in the following way:
IliDataSource* ds;
...
// We want to modify the 2nd row.
ds->gotoRow(1);
// Make any changes to the columns of the data source.
ds->setValue(“Name”, IliValue(“Smith”));
...
// Validate changes.
if(!ds->validate())
IlvPrint(“Update failed”);
The setValue
During the period of time that it takes for the isInputModified member function to return true on a data source, any pending changes can be canceled using the cancel member function.
In all situations, the underlying table is modified only when validate is called, not each time the setValue member function is called.
The following code sample shows how a new row can be inserted:
IliDataSource* ds;
...
// We want to insert a new row.
ds->startInsert();
// Assign values to the columns of the data source.
ds->setValue(“Id”, IliValue(32));
ds->setValue(“Name”, IliValue(“Jones”));
...
// Validate insertion.
if(!ds->validate())
IlvPrint(“Insert failed”);
The main difference between this example and the previous one is that the startInsert
You can disable the insertion through a data source by calling the enableInsert
The deleteCurrentRow