【问题标题】:Flex: datagrid select all itemsFlex:datagrid选择所有项目
【发布时间】:2011-03-27 04:53:19
【问题描述】:

选择数据网格中所有项目的最佳方式是什么。

我正在考虑做一个 for 循环,然后选择每个项目,但有没有更好的方法来实现这一点?

【问题讨论】:

    标签: apache-flex datagrid


    【解决方案1】:

    您使用的是什么类型的 dataProvider?

    如果你有一个数组,你可以这样做:

    dataGrid.selectedItems = dataGrid.dataProvider;
    

    如果你有一个 ArrayCollection,你可以这样做:

    dataGrid.selectedItems = dataGrid.dataProvider.source;
    

    对于 XML,您可能需要循环。

    有关 selectedItems 属性的更多信息:

    http://livedocs.adobe.com/flex/3/langref/mx/controls/listClasses/ListBase.html#selectedItems

    【讨论】:

    • @Adnan @Reboog711 如果您必须关心数据类型,那么您可能走错路了。 selectedItems 表示数据的子集 dataProvider。设置它听起来容易出错。更改selectedIndices 更加安全和优雅。
    • @Destroyica 我不认为我理解你的评论。在 Flex MX 列表中; dataProvider 是一个通用对象;所以对它的任何操作都需要知道类型。 selectedItems 属性必须包含 dataProvider 的元素。更改 selectedIndices 需要一个循环——如原始问题中所述——但我认为这会使代码不那么优雅。我不明白使用 selectedIndices 如何使代码比访问 selectedItems 更(或更少)安全。
    • 我的观点是,操作索引让组件可以处理数据。通过设置selectedItems,您可以向可能(完全)不同于dataProvider 的组件发送数据。我很确定当您设置 selectedItems 时,组件必须检查这两个集合之间的一致性 - 但它的工作原理是 ActionScript 非常方便。
    【解决方案2】:

    您好,我也用 mx.dataGrid 尝试了所有这些方法,但没有用, 这里我喜欢一个好方法

    var indexArr:Array = [];
    for(var i:uint= 0; i<dataGrid.dataProvider.length;i++ )
    {
    
        indexArr.push(i);    
    
    } 
    dataGrid.selectedIndices= indexArr;
    

    这对我有用

    【讨论】:

      【解决方案3】:

      我还将添加这个问题的补充。 要取消选择数据网格的所有项目,答案不是

      dataGrid.selectedItems = null;
      

      但我们会是

      dataGrid.selectedItems = new Array;
      

      第一个会抛出 NullPointerExceptions。

      【讨论】:

      • 感谢 @Zenklys 的补充
      猜你喜欢
      • 1970-01-01
      • 2015-02-13
      • 1970-01-01
      • 2020-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多