在本课程中,您将使用 DataGrid 窗口小部件来创建表。DataGrid 窗口小部件具有用于进行交互和可视表示的高级功能,这些功能使 GridLayout 窗口小部件能够更好地显示一系列记录。
在第 4 课中,您已将一个记录变量拖到编辑器中以创建 GridLayout 窗口小部件。在本课程中,您要将一系列记录拖到编辑器中,这在缺省情况下将创建一个 DataGrid 窗口小部件。
historyResults



selectionMode = DataGridLib.SINGLE_SELECTION,所指定的值确保用户只能选择网格中的一行,而不能选择多行。
selectionListeners ::= cellClicked,
您刚更新了侦听器属性,使得一系列函数按数组元素顺序运行。尤其是,您向与 selectionListeners 属性相关联的一系列函数追加了一个函数。稍后,您在本课程中将编写新函数。
侦听器函数将运行以针对用户操作(例如,单击)作出响应;在某些情况下,针对用于选择或取消选择某行或者更新复选框的函数调用作出响应。
, alignment = DataGridLib.ALIGN_RIGHT例如,“本金”列的声明现在看起来与以下代码相似:
new DataGridColumn {name = "loanAmount", displayName = "Principal", width = 80,
alignment = DataGridLib.ALIGN_RIGHT},
, formatters = [ formatDollars ]整个声明现在看起来与以下代码相似:
new DataGridColumn {name = "loanAmount", displayName = "Principal", width = 80,
alignment = DataGridLib.ALIGN_RIGHT, formatters = [ formatDollars ]},
, formatters = [ DataGridFormatters.percentage ]
, formatters = [ formatDollars ]代码的内容现在为如下所示:

通常,formatters 属性采用函数名数组。函数可以是预定义的函数,您也可以编写定制函数。例如,在 com.ibm.egl.rui.widgets 项目所包括的 DataGridFormatters 库中提供了 percentage 函数。
InfoBus.subscribe("mortgageApplication.mortgageCalculated", addResultRecord);
与以前一样,当服务返回新的计算结果时,您可使用 Infobus 来调用函数。// Update the grid to include the latest mortgage calculation function addResultRecord(eventName STRING in, dataObject ANY in) resultRecord MortgageCalculationResult = dataObject as MortgageCalculationResult; historyResults.appendElement(resultRecord); historyResults_ui.data = historyResults as ANY[]; end此时,将传入值强制转换为 MortgageCalculationResult 记录。然后将新的结果追加至结果数组,并更新 data 属性。此更新将导致刷新窗口小部件。
// Publish an event to the InfoBus whenever the user selects an old calculation
function cellClicked(myGrid DataGrid in)
updateRec MortgageCalculationResult = myGrid.getSelection()[1]
as MortgageCalculationResult;
InfoBus.publish("mortgageApplication.mortgageResultSelected", updateRec);
end
此函数将检索用户所选择的数据网格行,并向 Infobus 提供该行。Infobus 又会在任何已预订名为“mortgageApplication.mortgageResultSelected”的事件的处理程序中调用函数。function formatDollars(class string, value string, rowData any in) value = mortgageLib.formatMoney(value); end因为参数修饰符在缺省情况下为 InOut,所以第二个参数的值可用于 EGL 运行时代码。
请注意,您要复用 mortgageLib 库中的 formatMoney 函数。
在下一课中,您要将此处理程序与应用程序的其余部分进行集成。