使用 DataGrid 组件

DataGrid 组件允许您将数据显示在行和列构成的网格中,并将数据从可以解析的数组或外部 XML 文件放入 DataProvider 的数组中。DataGrid 组件包括垂直和水平滚动、事件支持(包括对可编辑单元格的支持)和排序功能。

您可以调整和自定义诸如网格中的字体、颜色以及列边框等特征。对于网格中的任何列,您都可以使用自定义影片剪辑作为单元格渲染器。(单元格渲染器显示单元格的内容。)可以禁用滚动条,并使用 DataGrid 方法来创建页面视图样式的显示。有关自定义的详细信息,请参阅 《用于 Adobe® Flash® Professional CS5 的 ActionScript® 3.0 参考》 中的 DataGridColumn 类。

与 DataGrid 组件进行用户交互

可以使用鼠标和键盘与 DataGrid 组件进行交互。

如果 sortableColumns 属性和列的 sortable 属性均为 true ,则单击列标题时会根据列的值对数据进行排序。可以通过将某个列的 sortable 属性设置为 false 来禁用该列的排序功能。

如果 resizableColumns 属性为 true ,则可以通过在标题行中拖动列分隔符来调整列的大小。

在可编辑单元格内单击会将焦点赋予该单元格,单击不可编辑的单元格不会影响焦点。如果某个单元格的 DataGrid.editable DataGridColumn.editable 属性均为 true ,则该单元格是可编辑的。

有关详细信息,请参阅 用于 Adobe Flash Platform 的 ActionScript 3.0 参考 中的 DataGrid 和 DataGridColumn 类。

当 DataGrid 实例从单击或 Tab 键切换中获得焦点时,您可以使用以下按键来控制它:

说明

向下箭头

如果正在编辑单元格,插入点将移到单元格文本的末尾。如果单元格不可编辑,则向下箭头处理选区的方式与 List 组件相同。

向上箭头

如果正在编辑单元格,插入点将移到单元格文本的开头。如果单元格不可编辑,则向上箭头处理选区的方式与 List 组件相同。

Shift+向上箭头/向下箭头

如果 DataGrid 不可编辑,且 allowMultipleSelection true ,则选择连续多行。用反向箭头反转方向可取消选择所选取的行,直至经过最开始的一行,从这一行开始沿反方向选择行。

Shift+单击

如果 allowMultipleSelection true ,则选择所选行与当前尖号位置(突出显示的单元格)之间的所有行。

Ctrl+单击

如果 allowMultipleSelection true ,则选择更多行,这些行不一定是连续的。

向右箭头

如果正在编辑单元格,插入点将向右移动一个字符。如果单元格不可编辑,向右箭头不会执行任何操作。

向左箭头

如果正在编辑单元格,插入点将向左移动一个字符。如果单元格不可编辑,向左箭头不会执行任何操作。

主页

选择 DataGrid 中的第一行。

End

选择 DataGrid 中的最后一行。

PageUp

选择 DataGrid 页中的第一行。页由 DataGrid 无需滚动即可显示的多行组成。

PageDown

选择 DataGrid 页中的最后一行。页由 DataGrid 无需滚动即可显示的多行组成。

Return/Enter/Shift+Enter 键

如果单元格可编辑,则会提交更改,并且插入点将移到同一列中单元格的下一行(向上或向下,视 shift 切换而定)。

Shift+Tab/Tab 键

如果 DataGrid 可编辑,则将焦点移到上一项/下一项,直至列的末尾,然后移到上一行/下一行,直至第一个或最后一个单元格。如果所选的是第一个单元格,则 Shift+Tab 将焦点移到上一个控件。如果所选的是最后一个单元格,则 Tab 将焦点移到下一个控件。

如果 DataGrid 不可编辑,则将焦点移到上一个/下一个控件。

可以使用 DataGrid 组件作为许多种数据驱动应用程序的基础。您不但可以轻松地显示数据的格式化表格式视图,而且可以使用单元格渲染器功能建立更为复杂和可编辑的用户界面片段。以下是 DataGrid 组件的实际用途:

  • Webmail 客户端

  • 搜索结果页

  • 电子表格应用程序,如借贷计算器和纳税申请表应用程序。

在设计具有 DataGrid 组件的应用程序时,了解 List 组件的设计很有帮助,因为 DataGrid 类扩展自 SelectableList 类。有关 SelectableList 类和 List 组件的详细信息,请参阅 用于 Adobe Flash Platform 的 ActionScript 3.0 参考 中的 SelectableList 和 List 类。

在将 DataGrid 组件添加到应用程序时,可以添加以下数行 ActionScript 代码,使屏幕阅读器能够访问它:

import fl.accessibility.DataGridAccImpl; 
DataGridAccImpl.enableAccessibility();

无论组件有多少实例,都只对组件启用一次辅助功能。有关详细信息,请参阅 《使用 Flash》 中的第 18 章“创建具有辅助功能的内容”。

DataGrid 组件参数

可以在“属性”检查器或“组件”检查器中为每个 DataGrid 组件实例设置以下创作参数: allowMultipleSelection editable headerHeight horizontalLineScrollSize horizontalPageScrollSize horizontalScrolllPolicy resizableColumns rowHeight showHeaders verticalLineScrollSize verticalPageScrollSize verticalScrollPolicy 。其中每个参数都有对应的同名 ActionScript 属性。有关这些参数的可能值的信息,请参阅 《用于 Adobe® Flash® Professional CS5 的 ActionScript® 3.0 参考》 中的 DataGrid 类。

创建具有 DataGrid 组件的应用程序

若要创建具有 DataGrid 组件的应用程序,您必须首先确定数据的来源。通常,数据来自数组,您可以通过设置 dataProvider 属性将数组拉入网格。也可以使用 DataGrid 和 DataGridColumn 类的方法将数据添加到网格中。

将本地数据提供程序用于 DataGrid 组件:

此示例创建一个 DataGrid,以显示垒球队的花名册。该示例在一个 Array ( aRoster ) 中定义花名册,然后将其分配给 DataGrid 的 dataProvider 属性。

  1. 在 Flash 中,选择“文件”>“新建”,然后选择“Flash 文件 (ActionScript 3.0)”。

  2. 将一个 DataGrid 组件从“组件”面板拖到舞台上。

  3. 在“属性”检查器中,输入实例名称 aDg

  4. 打开“动作”面板,在主时间轴中选择第 1 帧,然后输入以下 ActionScript 代码:

    import fl.data.DataProvider; 
     
    bldRosterGrid(aDg); 
    var aRoster:Array = new Array(); 
    aRoster = [ 
            {Name:"Wilma Carter", Bats:"R", Throws:"R", Year:"So", Home: "Redlands, CA"},  
            {Name:"Sue Pennypacker", Bats:"L", Throws:"R", Year:"Fr", Home: "Athens, GA"}, 
            {Name:"Jill Smithfield", Bats:"R", Throws:"L", Year:"Sr", Home: "Spokane, WA"}, 
            {Name:"Shirley Goth", Bats:"R", Throws:"R", Year:"Sr", Home: "Carson, NV"}, 
            {Name:"Jennifer Dunbar", Bats:"R", Throws:"R", Year:"Fr", Home: "Seaside, CA"}, 
            {Name:"Patty Crawford", Bats:"L", Throws:"L", Year:"Jr", Home: "Whittier, CA"}, 
            {Name:"Angelina Davis", Bats:"R", Throws:"R", Year:"So", Home: "Odessa, TX"}, 
            {Name:"Maria Santiago", Bats:"L", Throws:"L", Year:"Sr", Home: "Tacoma, WA"}, 
            {Name:"Debbie Ferguson", Bats:"R", Throws:"R", Year: "Jr", Home: "Bend, OR"}, 
            {Name:"Karen Bronson", Bats:"R", Throws:"R", Year: "Sr", Home: "Billings, MO"}, 
            {Name:"Sylvia Munson", Bats:"R", Throws:"R", Year: "Jr", Home: "Pasadena, CA"}, 
            {Name:"Carla Gomez", Bats:"R", Throws:"L", Year: "Sr", Home: "Corona, CA"}, 
            {Name:"Betty Kay", Bats:"R", Throws:"R", Year: "Fr", Home: "Palo Alto, CA"}, 
    ]; 
    aDg.dataProvider = new DataProvider(aRoster); 
    aDg.rowCount = aDg.length; 
     
    function bldRosterGrid(dg:DataGrid){ 
        dg.setSize(400, 300); 
        dg.columns = ["Name", "Bats", "Throws", "Year", "Home"]; 
        dg.columns[0].width = 120; 
        dg.columns[1].width = 50; 
        dg.columns[2].width = 50; 
        dg.columns[3].width = 40; 
        dg.columns[4].width = 120; 
        dg.move(50,50); 
    };

    bldRosterGrid() 函数设置 DataGrid 的大小以及列的顺序与大小。

  5. 选择“控制”>“测试影片”。

为应用程序中的 DataGrid 组件指定列和添加排序

请注意,您可以单击任意列标题,以根据该列的值按降序对 DataGrid 的内容进行排序。

以下示例使用 addColumn() 方法将 DataGridColumn 实例添加到 DataGrid。列表示队员的姓名及其分数。该示例还设置了 sortOptions 属性,以指定每一列的排序选项: Array.CASEINSENSITIVE 用于 Name 列, Array.NUMERIC 用于 Score 列。此外,该示例将 DataGrid 的长设置为行数,宽设置为 200,从而适当地调整 DataGrid 的大小。

  1. 在 Flash 中,选择“文件”>“新建”,然后选择“Flash 文件 (ActionScript 3.0)”。

  2. 将一个 DataGrid 组件从“组件”面板拖到舞台上。

  3. 在“属性”检查器中,输入实例名称 aDg

  4. 打开“动作”面板,在主时间轴中选择第 1 帧,然后输入以下 ActionScript 代码:

    import fl.controls.dataGridClasses.DataGridColumn; 
    import fl.events.DataGridEvent; 
    import fl.data.DataProvider; 
    // Create columns to enable sorting of data. 
    var nameDGC:DataGridColumn = new DataGridColumn("name"); 
    nameDGC.sortOptions = Array.CASEINSENSITIVE; 
    var scoreDGC:DataGridColumn = new DataGridColumn("score"); 
    scoreDGC.sortOptions = Array.NUMERIC; 
    aDg.addColumn(nameDGC); 
    aDg.addColumn(scoreDGC); 
    var aDP_array:Array = new Array({name:"clark", score:3135}, {name:"Bruce", score:403}, {name:"Peter", score:25}) 
    aDg.dataProvider = new DataProvider(aDP_array); 
    aDg.rowCount = aDg.length; 
    aDg.width = 200;
  5. 选择“控制”>“测试影片”。

使用 ActionScript 创建 DataGrid 组件实例

此示例使用 ActionScript 创建一个 DataGrid 组件,并用队员姓名和分数的数组填充该组件。

  1. 创建一个新的 Flash (ActionScript 3.0) 文档。

  2. 将 DataGrid 组件从“组件”面板拖到当前文档的“库”面板中。

    此操作将组件添加到库中,但不会在应用程序中显示该组件。

  3. 打开“动作”面板,在主时间轴中选择第 1 帧,然后输入以下 ActionScript 代码:

    import fl.controls.DataGrid; 
    import fl.data.DataProvider; 
     
    var aDg:DataGrid = new DataGrid(); 
    addChild(aDg); 
    aDg.columns = [ "Name", "Score" ]; 
    aDg.setSize(140, 100); 
    aDg.move(10, 40);

    此代码创建 DataGrid 实例,然后调整网格大小和定位网格。

  4. 创建一个数组,向数组中添加数据,并将该数组标识为 DataGrid 的数据提供程序:

    var aDP_array:Array = new Array(); 
    aDP_array.push({Name:"Clark", Score:3135}); 
    aDP_array.push({Name:"Bruce", Score:403}); 
    aDP_array.push({Name:"Peter", Score:25}); 
    aDg.dataProvider = new DataProvider(aDP_array); 
    aDg.rowCount = aDg.length;
  5. 选择“控制”>“测试影片”。

用 XML 文件加载 DataGrid

以下示例使用 DataGridColumn 类创建 DataGrid 的列。该示例将 XML 对象作为 DataProvider() 构造函数的 value 参数传递,并通过此方法来填充 DataGrid。

  1. 使用文本编辑器创建一个包含以下数据的 XML 文件并将其另存为 team.xml ,保存在将保存 FLA 文件的文件夹中。

    <team> 
        <player name="Player A" avg="0.293" /> 
        <player name="Player B" avg="0.214" /> 
        <player name="Player C" avg="0.317" /> 
    </team>
  2. 创建一个新的 Flash (ActionScript 3.0) 文档。

  3. 在“组件”面板中,双击 DataGrid 组件以将其添加到舞台上。

  4. 在“属性”检查器中,输入实例名称 aDg

  5. 打开“动作”面板,在主时间轴中选择第 1 帧,然后输入以下 ActionScript 代码:

    import fl.controls.dataGridClasses.DataGridColumn; 
    import fl.data.DataProvider; 
    import flash.net.*; 
    import flash.events.*; 
     
    var request:URLRequest = new URLRequest("team.xml"); 
    var loader:URLLoader = new URLLoader; 
     
     
    loader.load(request); 
    loader.addEventListener(Event.COMPLETE, loaderCompleteHandler); 
     
    function loaderCompleteHandler(event:Event):void { 
     
        var teamXML:XML = new XML(loader.data); 
     
        var nameCol:DataGridColumn = new DataGridColumn("name"); 
        nameCol.headerText = "Name"; 
        nameCol.width = 120; 
        var avgCol:DataGridColumn = new DataGridColumn("avg"); 
        avgCol.headerText = "Average"; 
        avgCol.width = 60; 
         
        var myDP:DataProvider = new DataProvider(teamXML); 
         
        aDg.columns = [nameCol, avgCol]; 
        aDg.width = 200; 
        aDg.dataProvider = myDP; 
        aDg.rowCount = aDg.length; 
    }
  6. 选择“控制”>“测试影片”。