2012-06-18 51 views
0

我卡在下列事項:保持特定的DataGrid行總是在最後 - 也與排序

我有一個datagrid有10個項目......我還添加了額外的行(行號11)其中,I顯示總共prevouis字段...但我總是想保持最後一行(總數)在Datagrid的最後一行(所以總是在位置11)。

這意味着當數據網格按列排序時,最後一行也根據數據字段中的值更改位置。是否有任何簡單而直接的方法來防止它與其他列進行排序,以便總計的列總是放在最後?或者我最好使用什麼方法?

感謝您的幫助!

+1

我想你可以寫一個自定義比較函數,它會始終將最後一個值放在一個特定值上,並將其分配給'GridColumn#sortCompareFunction'。 – RIAstar

回答

1

請找到下面的代碼希望這可以幫助你,我嘗試了一些解決方法,以實現你在找什麼我不知道是否可行這個代碼: -

<?xml version="1.0" encoding="utf-8"?> 
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
       xmlns:s="library://ns.adobe.com/flex/spark" 
       xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" 
       > 
    <fx:Declarations> 
     <!-- Place non-visual elements (e.g., services, value objects) here --> 
    </fx:Declarations> 
    <fx:Script> 
     <![CDATA[ 
      import mx.collections.ArrayCollection; 
      import mx.events.FlexEvent; 

      [Bindable] 
      private var dpHierarchy:ArrayCollection= new ArrayCollection([ 
       {name:"A", region: "Arizona", number:1}, 
       {name:"B", region: "Arizona", number:2}, 
       {name:"C", region: "California", number:3}, 
       {name:"D", region: "California", number:4} 
      ]); 

      private function creationComp():void 
      { 
       var totalValue:int = 0; 
       for(var i:int=0; i<dpHierarchy.length; i++) 
       { 
        totalValue = totalValue + dpHierarchy[i].number; 
       } 
       var obj:Object = new Object(); 
       obj.name = "Total"; 
       obj.region = "=="; 
       obj.number = totalValue; 
       dpHierarchy.addItem(obj) 
       myADG.dataProvider = dpHierarchy; 
      } 

      private function sortHandler(obj1:Object, obj2:Object):int 
      { 
       var lastObj:Object = dpHierarchy.getItemAt(dpHierarchy.length-1); 

       if(lastObj.number == obj1.number || lastObj.number == obj2.number) 
        return 0; 

       if(obj1.number < obj2.number) { 
        return -1; 
       } else if(obj1 == obj2) { 
        return 0; 
       } 
       return 1; 
      } 
     ]]> 
    </fx:Script> 

    <mx:AdvancedDataGrid id="myADG" x="50" y="50" 
         width="400" height="300" 
         variableRowHeight="true" creationComplete="creationComp()"> 
     <mx:columns> 
      <mx:AdvancedDataGridColumn dataField="name" headerText="Name" sortCompareFunction="sortHandler"/> 
      <mx:AdvancedDataGridColumn dataField="region" headerText="Region" sortCompareFunction="sortHandler"/> 
      <mx:AdvancedDataGridColumn dataField="number" headerText="Number" sortCompareFunction="sortHandler"/> 
     </mx:columns> 

    </mx:AdvancedDataGrid> 

</s:Application> 
+0

感謝您的代碼!它確實爲最好的方法提供了一個好主意! – CGBe

0

我會考慮這個順序的幾個選項。

  1. 將您的摘要數據放在別的地方。這實際上並不是數據網格中的一行意圖。
  2. 如果您不希望他們排序數據,則不要讓用戶通過單擊列名(sortableColumns ='false')來排序。
  3. 爲每列創建一個自定義排序,以確保始終將摘要數據放在最後。這是一個體面的教程:http://www.switchonthecode.com/tutorials/flex-datagrid-custom-sorting。我想強調,這將是一個高維護的想法,因爲你必須爲每一列建立一個自定義排序。
相關問題