AboutBox  CanUndo

Chapter 9: Methods for the DataWindow Control

AcceptText

Description

Applies the contents of the DataWindow’s edit control to the current item in the buffer of a DataWindow control or DataStore. The data in the edit control must pass the validation rule for the column before it can be stored in the item.

Syntax

integer dwcontrol.AcceptText ( )

Argument

Description

dwcontrol

A reference to a DataWindow control, DataStore, or child DataWindow

Returns

Returns 1 if it succeeds and -1 if it fails (for example, the data did not pass validation).

If dwcontrol is NULL, the method returns NULL. If there is no DataWindow object assigned to the DataWindow control or DataStore, this method returns 1.

Usage

When a user moves from item to item in a DataWindow control, the control validates and accepts data the user has edited.


How to call AcceptText

When a user modifies a DataWindow item and then immediately changes focus to another control in the window, the DataWindow control does not accept the modified data—the data remains in the edit control. Use the AcceptText method in this situation to ensure that the DataWindow object contains the data the user edited.

However, you must not call AcceptText in the LoseFocus event or in a user event posted from LoseFocus if the DataWindow control still has focus. If you do, an infinite loop can occur.

The problem Normally, new data is validated and accepted when the user moves to a new cell in the DataWindow. If the new data causes an error, a message box displays, which causes the DataWindow to lose focus. If you have also coded the LoseFocus event or an event posted from LoseFocus to call AcceptText to validate data when the control loses focus, this AcceptText runs because of the message box and triggers an infinite loop of validation errors.

The solution It is desirable to validate the last changed data when the control loses focus. You can accomplish this by making sure AcceptText gets called only when the DataWindow control really has lost focus. The third example below illustrates how to use an instance variable to keep track of whether the DataWindow control has focus. The posted event calls AcceptText only when the DataWindow control does not have focus.


Events

AcceptText can trigger an ItemChanged or an ItemError event.

NoteAcceptText in the ItemChanged event Calling AcceptText in the ItemChanged event has no effect.

Examples

Example 1

Example 1 In this example, the user is expected to enter a key value (such as an employee number) in a column of the DataWindow object, then click the OK button. This script for the Clicked event for the button calls AcceptText to validate the entry and place it in the DataWindow control. Then the script uses the item in the Retrieve method to retrieve the row for that key:

IF dw_emp.AcceptText() = 1 THEN

		dw_emp.Retrieve(dw_emp.GetItemNumber &

			(dw_emp.GetRow(), dw_emp.GetColumn()))

END IF

Example 2

Example 2 This script for the Clicked event for a CommandButton accepts the text in the DataWindow dw_Emp and counts the rows in which the column named balance is greater than 0:

integer i, Count

dw_employee.AcceptText()

FOR i = 1 to dw_employee.RowCount()

		IF dw_employee.GetItemNumber(i,'balance') &

				> 0 THEN

			Count = Count + 1

		END IF

NEXT

Example 3

Example 3 This example illustrates how to validate newly entered data when the DataWindow control loses focus. An instance variable keeps track of whether the DataWindow control has focus. It is set in the GetFocus and LoseFocus events. The LoseFocus event posts the ue_acceptText event, which calls the AcceptText method only if the DataWindow control does not have focus.

The instance variable:

boolean dw_has_focus

The GetFocus event:

dw_has_focus = TRUE

The LoseFocus event:

dw_has_focus = FALSE

dw_1.event  post ue_acceptText( )


The ue_acceptText event:

IF dw_has_focus = FALSE THEN

		dw_1.accepttext( )

END IF

See also





Copyright © 2004. Sybase Inc. All rights reserved. CanUndo

View this book as PDF