【问题标题】:Flex:programmatically selecting some row - selectedItem is nullFlex:以编程方式选择某行 - selectedItem 为空
【发布时间】:2010-12-29 10:08:58
【问题描述】:

在我的应用程序中,我有一个绑定到 RemoteObject 的数据网格。这 datagrid 有一个包含详细信息的相应表单。什么时候 用户单击表单填充的数据网格中的一行 来自 DataGrid 的 selectedItem 的值。

我想在我的 DataGrid 中以编程方式选择某行 应用程序加载。

为此,我必须调用 validateNow() 和 scrollToIndex()

例如。

dg.selectedIndex = i; dg.validateNow();
dg.scrollToIndex(i);

我将此代码放在 Applications creationComplete 处理程序中。

这一切都很好 - 所需的行被突出显示并被选中 selectedIndex 是 i。问题是我无法访问数据 填充详细信息表单。当我尝试检索 dg.SelectedItem 属性 - 它为空。

如何在加载时以编程方式选择网格中的某一行 并访问行数据?

谢谢

【问题讨论】:

    标签: apache-flex datagrid


    【解决方案1】:

    使用

    dg.invalidateList();
    dg.callLater(setRows, [1]);
    
    function selRows(indices:Array):void {
      dg.selectedIndices = indices;
      dg.validateNow();
      dg.scrollToRow(indices[0]);
    }
    

    基本上,如果您要更改 DG 数据并在同一流程中选择项目,您的选择将被 ListBase 方法覆盖,您必须在当前 GUI 更新后设置选择,您需要使用 callLater 方法。

    【讨论】:

    • 这太棒了!我有一个类似的问题(提供者更改时数据网格选择重置),我需要在数据更改之前存储所选项目,并在更改结束时再次更新它们,直到我使用你的 callLater 解决方案才起作用。 10 倍!
    【解决方案2】:

    datagrid 的选中项只是指向 dataProvider 中的项。如果您知道要在数据网格中选择哪个项目,只需在源数据中使用该项目来完成表单的初始填充。

    【讨论】:

    • 谢谢哥们的回复。但是dataProvider也是空的。我不能这样做:datagrid.dataProvider[i]什么的
    猜你喜欢
    • 2012-01-12
    • 2011-01-03
    • 2012-11-28
    • 1970-01-01
    • 1970-01-01
    • 2015-07-17
    • 1970-01-01
    • 1970-01-01
    • 2019-05-26
    相关资源
    最近更新 更多