How Do I Get Data Associated With a Row or Column?
This lesson will show you how to get the array of data associated with a row in a Data Grid form as well as how to get the data associated with a row's column in a Data Grid table.
To get the array of data from a Data Grid you can use one of the following properties:
• the dgDataOfIndex
• the dgDataOfLine
Both properties return the array associated with a row in the Data Grid, they just allow you to target the row differently. dgDataOfLine allows you to target the row in the order it appears visually in the Data Grid. dgDataOfIndex allows you to target a row based on the internal index number that the Data Grid uses to identify the row. This value does not change, even if you change the sort order for the Data Grid.
If you just need a particular column from a row then you can use one of the following functions:
• GetDataOfIndex()
• GetDataOfLine()
Both of these functions return the value associated with a particular key, or column, for a row.
Let's look at some examples of how to use these properties and functions.
Getting Data Associated with the Selected Row
If you want to get the data associated with the selected row use the dgHilitedLines property. The value of that property can be used in conjunction with the dgDataOfLine property. Here is an example of a script that could be placed in a button. The Data Grid group script is NOT in the message path for this example:
on mouseUp pBtnNum
local tLine, tDataA
if pBtnNum is 1 then
put the dgHilitedLines of group "DataGrid 1" into tLine
put the dgDataOfLine[tLine] of group "DataGrid 1" into tDataA
## tDataA is now an array variable.
## In the case of the Data Grid pictured above the keys of the array are id, FirstName, LastName and Title.
## This answer dialog will display: Dusty Bottoms
answer tDataA["FirstName"] && tDataA["LastName"]
end if
end mouseUp
Now let's assume that you only want to get the "id" value for the selected row without fetching the entire array. You can use GetDataOfLine to accomplish this. You need to keep in mind that GetDataOfLine (and GetDataOfIndex) is a function defined for a Data Grid. That means that the Data Grid group MUST be in the message path. If the Data Grid group is not in the message path you would need to use the call command.
To illustrate how to use GetDataOfLine let's look at how you could define your own custom property for a Data Grid. The following code defines a uSelectedID custom property that returns the id of the selected row. This code would be placed in the Data Grid group script.
getProp uSelectedID
local tLine, tSelectedLine
put the dgHilitedLines of me into tLine
return GetDataOfLine(tLine, "id")
end uSelectedID
You can now access this custom property from any script in your application:
put the uSelectedID of group "DataGrid" into tSelectedID
Getting Data When The Selection Changes
When the user makes a new selection in a Data Grid the selectionChanged message is sent to the Data Grid. The following selectionChanged message could appear in the script of your Data Grid group:
-- example that would be placed in the data grid script.
on selectionChanged pHilitedIndex, pPrevHilitedIndex
put the dgDataOfIndex [ pHilitedIndex ] of me into tDataA
## Now call handler in card script that loads info for selected person.
uiViewRecordOfID theDataA["id"]
end selectionChanged
Getting Data In A Row Behavior
If you want to get the data in a row behavior script you can use the dgIndex or dgLine custom properties of the row control. Here is an example that could be used in a Data Grid form behavior script:
==========
Data Grid Form Example: Row Behavior
==========
on mouseUp pMouseBtnNum
local tData
if pMouseBtnNum is 1 then
## the dgIndex is a custom property of this row.
## the dgControl is a custom property of the data grid itself.
put the dgDataOfIndex[ the dgIndex of me] of the dgControl of me into tDataA
uiViewRecordOfID tDataA["id"]
end if
end mouseUp
If you wanted to move this same mouseUp code into the Data Grid script itself then you would change the 'me' references to 'target' and add a check to ensure that the user clicked on a row. This example also uses GetDataOfIndex rather than dgDataOfIndex to show an alternative.
==========
Data Grid Form Example: Data Grid Script
==========
on mouseUp pMouseBtnNum
local tID, tIndexThatWasClickedOn
if pMouseBtnNum is 1 then
## the dgIndex is a custom property of the row.
put the dgIndex of the target into tIndexThatWasClickedOn
if tIndexThatWasClickedOn is not empty then
put GetDataOfIndex(tIndexThatWasClickedOn, "id") into tID
uiViewRecordOfID tID
end if
end if
end mouseUp
Getting Data In A Column Behavior
If you want to get the data in a column behavior script you can use the dgIndex or dgLine and dgColumn custom properties of the column control. Here is an example that could be used in a Data Grid column behavior script:
==========
Data Grid Table Example: Column Behavior
==========
on mouseUp pMouseBtnNum
local tColumnValue
if pMouseBtnNum is 1 then
## the dgIndex is a custom property of the row.
## the dgColumn is a custom property of the column.
put GetDataOfIndex(the dgIndex of me, the dgColumn of me) into tColumnValue
## Do something with column value..
end if
end mouseUp
If you wanted to move this same mouseUp code into the Data Grid script itself then you would change the 'me' references to 'target' and add a check to ensure that the user clicked on a column:
==========
Data Grid Table Example: Data Grid Script
==========
on mouseUp pMouseBtnNum
local tColumn, tColumnValue
if pMouseBtnNum is 1 then
## the dgIndex is a custom property of the row.
## the dgColumn is a custom property of the column.
put the dgColumn of the target into tColumn
if tColumn is not empty then ## User clicked on a column
put GetDataOfIndex(the dgIndex of the target, tColumn) into tColumnValue
## Do something with column value..
end if
end if
end mouseUp
0 Comments
Add your comment