Occurs when a field has been modified, the field loses focus (for example, the user presses Enter, Tab, or an arrow key or clicks the mouse on another field in the DataWindow), and the data in the field does not pass the validation rules for its column. ItemError can also occur when a value imported into a DataWindow control or DataStore does not pass the validation rules for its column.

PowerBuilder event information

Event ID: pbm_dwnitemvalidationerror




Long by value. The number of the row containing the item whose new value has failed validation.


DWObject by value. A reference to the column containing the item. Dwo is a reference to the column control, not the name of the column.


String by value. The new data the user specified for the item.

Return Values

Set the return code to affect the outcome of the event:

0 -- (Default) Reject the data value and show an error message box

1 -- Reject the data value with no message box

2 -- Accept the data value

3 -- Reject the data value but allow focus to change

For information on setting the return code in a particular environment, see About return values for DataWindow events.


If the return code is 0 or 1 (rejecting the data), the field with the incorrect data regains the focus.

The ItemError event occurs instead of the ItemChanged event when the new data value fails a validation rule. You can force the ItemError event to occur by rejecting the value in the ItemChanged event.

Obsolete techniques in PowerBuilder

Information provided by the GetText and GetRow methods is now available in the data and row arguments.

Instead of calling GetColumnName, use the dwo argument and a reference to its Name property.

Instead of calling SetActionCode, use a RETURN statement with the return codes listed above.


The following excerpt from an ItemError event script of a DataWindow control allows the user to blank out a column and move to the next column. For columns with datatypes other than string, the user cannot leave the value empty (the empty string does not match the datatype). If the user tried to leave the value blank, this code sets the value of the column to a null value of the appropriate datatype.

string ls_colname, ls_datatype
ls_colname = dwo.Name
ls_datatype = dwo.ColType
// Reject the value if non-blank
IF Trim(data) <> "" THEN
      RETURN 0
// Set value to null if blank
CHOOSE CASE ls_datatype
      CASE "long"
      integer null_num
      This.SetItem(row, ls_colname, null_num)
      RETURN 3
      CASE "date"
      date null_date
      This.SetItem(row, ls_colname, null_date)
      RETURN 3
      // Additional cases for other datatypes

See also