2017-10-14 63 views
0

我有一個dataGrid包含一些遊戲後的積分榜。我想要對dataGrid進行排序,首先贏得目標差異。爲每個團隊(1-12)提供不同的變量,以XML形式從多個遊戲工作表中收集數據。actionscript 3.0在多個條件下排序datagrid

我怎樣才能首先排序「勝利」,而不是「GD」?

感謝您的幫助!

function Standings(){ 
var myDP5: DataProvider = new DataProvider(); 
     for (var k: int = 1; k < 13 ; k++) { 
      var TEAM_0 =this['TEAM_'+ k]; 
      var TEAM_0_GF: Array = this['TEAM_' + k+"_GF"]; 
      var TEAM_0_GP: int = this['TEAM_' + k+"_GP"]; 
      var TEAM_0_GA: int = this['TEAM_' + k+"_GA"]; 
      var TEAM_0_win: int = this['TEAM_' + k+"_win"]; 
      var TEAM_0_loss: int = this['TEAM_' + k+"_loss"]; 
      var TEAM_0_GD:int =TEAM_0_GF.length -TEAM_0_GA; 
      myDP5.addItem({ 
       "TEAM": TEAM_0, 
       "GP": TEAM_0_GP, 
       "WIN": TEAM_0_win, 
       "LOSS": TEAM_0_loss, 
       "GF": TEAM_0_GF.length, 
       "GA": TEAM_0_GA, 
       "GD": TEAM_0_GD 


      }); 

     } 

     standings_grid = new DataGrid(); 
     standings_grid.addEventListener(Event.CHANGE, velgeKamp); 
     standings_grid.columns = ["TEAM", "GP", "WIN","LOSS","GF","GA","GD"]; 
     standings_grid.dataProvider = myDP5; 
     standings_grid.rowCount = 20; 
     standings_grid.move(50, 50); 
     standings_grid.width = 500; 
     standings_grid.columns[0].width = 120; 
     standings_grid.columns[1].width = 70; 
     standings_grid.columns[2].width = 50; 
     standings_grid.columns[3].width = 50; 
     standings_grid.columns[4].width = 50; 
     standings_grid.columns[5].width = 50; 
     standings_grid.columns[6].width = 50; 

     standings_grid.width = 440; 
     standings_grid.resizableColumns = false; 
     standings_grid.sortOn("WIN",Array.DESCENDING); 
     //standings_grid.sortItemsOn("LOSS", Array.NUMERIC); 
     //oversikt_gridd.height = 500; 
     standings_grid.sortableColumns = true; 
     addChild(standings_grid); 
} 

回答

1

很簡單。您應該創建一個陣列的項目然後的.sort(...)的compareFunction說法:

var aList:Array = new Array; 

for (var k: int = 1; k < 13 ; k++) 
{ 
    var TEAM_0 = this['TEAM_'+ k]; 
    var TEAM_0_GF: Array = this['TEAM_' + k + "_GF"]; 
    var TEAM_0_GP: int = this['TEAM_' + k + "_GP"]; 
    var TEAM_0_GA: int = this['TEAM_' + k + "_GA"]; 
    var TEAM_0_win: int = this['TEAM_' + k + "_win"]; 
    var TEAM_0_loss: int = this['TEAM_' + k + "_loss"]; 
    var TEAM_0_GD:int = TEAM_0_GF.length - TEAM_0_GA; 

    var anEntry:Object = 
    { 
     "TEAM": TEAM_0, 
     "GP": TEAM_0_GP, 
     "WIN": TEAM_0_win, 
     "LOSS": TEAM_0_loss, 
     "GF": TEAM_0_GF.length, 
     "GA": TEAM_0_GA, 
     "GD": TEAM_0_GD 
    }; 

    aList.push(anEntry); 
} 

aList.sort(compareEntries); 

// -1 to sort A before B 
// 0 to not sort A and B 
// 1 to sort A after B 
function compareEntries(A:Object, B:Object):Number 
{ 
    // I don't know what exactly you need 
    // but I believe you'll figure it out. 

    if (A['WIN'] > B['WIN']) return -1; 
    if (A['WIN'] < B['WIN']) return 1; 

    // Now if A['WIN'] == B['WIN']. 

    if (A['GD'] > B['GD']) return -1; 
    if (A['GD'] < B['GD']) return 1; 

    return 0; 
} 

// Now pass the sorted items to the DataProvider. 
var myDP5:DataProvider = new DataProvider; 
while (aList.length) myDP5.addItem(aList.shift()); 
+0

謝謝! @Organis – martinml