FLEX - 如何在DataGrid中单击一行并突出显示所有相关行

时间:2010-07-01 21:24:18

标签: flex datagrid

有人可以向我展示一个基本的例子,说明如何在flex中的数据网格中选择一行,并让它突出显示该行加上任何相关的行。让我举个例子:

假设我有一个数据网格。在网格中,每行有两列。一列拥有他们拥有的汽车类型,另一列拥有所有者名称。假设一个拥有者有两辆车。所以你有一个看起来像这样的数据网格(4行,2列):

Camery Jon

Tundra Billy

Jaguar Jon

Range Rover Mike

我正在寻找...如果您点击Camery行,Jaguar行和Camery行都会突出显示。

我有一个包含项目的数据网格,并且具有与其父项相关的项目。

由于

2 个答案:

答案 0 :(得分:0)

  1. 在datagrid上使用ItemClick事件
  2. 获取selectedItem(表示所选行数据)
  3. 在datagrid上启用multipleSelection
  4. 循环通过数据提供者并找到要突出显示的项目的索引(对于Jon出现的所有索引)。
  5. 使用在步骤4中收集的信息在数据提供者上设置selectedIndexed

答案 1 :(得分:0)

这是一个使用处理程序进行更改事件的快速而脏的实现:

private function onChange(e:ListEvent):void {
    var dp:ArrayCollection = e.currentTarget.dataProvider as ArrayCollection;
    var matches:ArrayCollection = new ArrayCollection();
    for (var i:int = 0; i < dp.length; i++) {
        if (dp[i].person == e.itemRenderer.data.person) {
            matches.addItem(dp[i]);
        }
    }
    (e.currentTarget as DataGrid).selectedItems = matches.source;
}

这是datagrid的MXML:

<mx:DataGrid change="onChange(event)">
    <mx:dataProvider>
        <s:ArrayCollection>
            <fx:Object person="Jon" car="Camry"/>
            <fx:Object person="Billy" car="Tundra"/>
            <fx:Object person="Jon" car="Jaguar"/>
            <fx:Object person="Mike" car="Range Rover"/>
        </s:ArrayCollection>
    </mx:dataProvider>
    <mx:columns>
        <mx:DataGridColumn dataField="person"/>
        <mx:DataGridColumn dataField="car"/>
    </mx:columns>
</mx:DataGrid>

希望有所帮助。