使用 DataGrid 組件

此 DataGrid 組件讓您能以列與欄的格線形式顯示資料,它會繪製陣列或外部 XML 檔中的資料,讓您可以剖析至 DataProvider 的陣列內部。DataGrid 組件包含垂直和水平捲動功能、事件支援 (包括對可編輯儲存格的支援) 功能,以及排序功能。

您可以調整大小並自訂如字體、顏色及格線中各欄邊框之類的特性。您可以將自訂影片片段當做格線中任何一欄的「儲存格輸出器」(儲存格輸出器顯示儲存格的內容)。您可以關閉捲軸並使用 DataGrid 方法,建立頁面檢視樣式顯示。如需有關自訂的詳細資訊,請參閱 Flash Professional 的 ActionScript 3.0 參考 中的「DataGridColumn 類別」。

與 DataGrid 組件的使用者互動

您可以使用滑鼠和鍵盤與 DataGrid 組件互動。

如果 sortableColumns 屬性和該欄的 sortable 屬性都是 true ,按一下欄標題便會根據該欄的值來排序資料。您可以將各欄的 sortable 屬性設定為 false ,停用該欄的排序功能。

如果 resizableColumns 屬性為 true ,您便可藉由拖曳標題列上的欄分隔線來調整欄的大小。

在可編輯的儲存格中按一下,就能讓該儲存格成為焦點;而在不可編輯的儲存格中按一下,則不會對焦點產生任何影響。當個別儲存格的 DataGrid.editable DataGridColumn.editable 兩個屬性都是 true 時,該儲存格便為可編輯的儲存格。

如需詳細資訊,請參閱 ActionScript 3.0 參考 中的「DataGrid 類別」和「DataGridColumn 類別」。

利用按一下或 Tab 鍵定位的方式讓 DataGrid 實體成為焦點後,您就能使用下列按鍵加以控制:

按鍵

說明

向下鍵

編輯儲存格時,插入點會移到儲存格文字的結尾。如果儲存格不可編輯,向下鍵則以如同 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+Tab/Tab

如果 DataGrid 可以編輯,便會將焦點移到上一個/下一個項目,直到抵達該欄結尾為止,然後再移到上一列/下一列,直到抵達第一個或最後一個儲存格為止。如果已經選取第一個儲存格,按下 Shift+Tab 便會將焦點移到前一個控制項。如果已經選取最後一個儲存格,按下 Tab 便會將焦點移到下一個控制項。

如果 DataGrid 不可編輯,則會將焦點移到上一個/下一個控制項。

您可以使用 DataGrid 組件做為各種以資料驅動之應用程式類型的基礎。您可以輕鬆地顯示格式化表格資料檢視,也可以使用儲存格輸出器功能來建立更複雜又可以編輯的使用者介面片段。以下是 DataGrid 組件的實際用途:

  • 網路郵件用戶端

  • 搜尋結果網頁

  • 試算表應用程式,例如貸款計算程式和報稅應用程式

當您設計具有 DataGrid 組件的應用程式時,瞭解 List 組件的設計原理將會對您相當有幫助,因為 DataGrid 類別會擴充 SelectableList 類別。如需有關 SelectableList 類別和 List 組件的詳細資訊,請參閱「ActionScript 3.0 語言和組件參考」中的 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 同名屬性。如需有關這些參數可能值的詳細資訊,請參閱 Flash Professional 的 ActionScript 3.0 參考 中的 DataGrid 類別。

建立具有 DataGrid 組件的應用程式

若要建立具有 DataGrid 組件的應用程式,您必須先確定資料的來源。一般而言,資料都來自 Array,您可以設定 dataProvider 屬性,將 Array 拉入格線中。您也可以使用 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 屬性,以指定各欄的排序選項:Name 欄為 Array.CASEINSENSITIVE ,而 Score 欄則為 Array.NUMERIC 。DataGrid 的長度將設定為列數,且寬度設定為 200,以適當地調整大小。

  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,並在其中填入由選手名稱及得分構成的 Array。

  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. 選取「控制 > 測試影片」。