有才華的人,別忘記給滋潤你的那塊土壤施肥

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            28 隨筆 :: 5 文章 :: 147 評論 :: 0 Trackbacks
                

                   Excel的表格中會在在一組數據的后面有一行數據來顯示這個表格的某一列的平均數,最大值,最小值等,在Flex中做些小動作也能做出類似效果。
              
              其實Alex Harui早已經為我們做了要求,我們先看運行效果:


                其實原理很簡單就是在重寫DataGrid在列尾添加一個UIComponent即取名為:DataGridFooter,讓它去展現平均數,最大值等,在這里最重要的是重寫DataGridColumn,在這個類中我們添加一個footerColumn:DataGridColumn,讓這個footerColumn的labelFunction計算出對應的平均數,最大值等處理(關于labelFunction的使用請看這里:Flex Hack 01:labelFunction的使用),代碼如下:

          import mx.controls.dataGridClasses.DataGridColumn;
              [DefaultProperty(
          "footerColumn")]
              public class FooterDataGridColumn extends DataGridColumn
              
          {
                   public 
          function FooterDataGridColumn()
                   
          {
                    super();
                   }

                   
          /**
                   * 用這個對應的labelFunction計算出這一列的最大值或最小值等等
                   * *
          */

                   public 
          var footerColumn:DataGridColumn;
              }

               然后就是重寫DataGrid,用于顯示列尾 ,如重寫createChildren方法:
          override protected function createChildren():void
                  
          {
                      super.createChildren();
                      
          if (!footer)
                      
          {
                          footer 
          = new DataGridFooter();
                          footer.styleName 
          = this;
                          addChild(footer);
                      }

                  }
             再就重寫adjustListContent方法以確定footer的位置:
            override protected function adjustListContent(unscaledWidth:Number = -1,
                                                     unscaledHeight:Number 
          = -1):void
                  
          {
                    super.adjustListContent(unscaledWidth, unscaledHeight);
                    listContent.setActualSize(listContent.width, listContent.height 
          - footerHeight);
                    footer.setActualSize(listContent.width, footerHeight);
                    footer.move(listContent.x, listContent.y 
          + listContent.height + 1);
                   }
              同時當有一些屬性更改或拖動來更新footer的位置等等,那么我們還有重寫一個方法:
          override public function invalidateDisplayList():void
                   
          {
                        super.invalidateDisplayList();
                        
          if (footer)
                             footer.invalidateDisplayList();
                   }
               還有一個類DataGridFooter,這個就是我們的主角,用于顯示列尾的數據,關于這個類沒什么特別的,就是計算他們的位置顯示等等,有興趣的朋友可以在下面的資料中下載代碼看看。

          測試例子:點擊這里

          源文件下載:Download


          posted on 2009-08-17 22:27 kissjava 閱讀(2480) 評論(6)  編輯  收藏 所屬分類: Flex

          評論

          # re: Flex Hack 02:DataGrid列尾,用于數據匯總 2009-08-18 09:51 凡客誠品
          不錯啊  回復  更多評論
            

          # re: Flex Hack 02:DataGrid列尾,用于數據匯總 2009-09-02 13:33
          源文件看起來是對的,但用起來會出現行列不對齊的錯誤,不能使用  回復  更多評論
            

          # re: Flex Hack 02:DataGrid列尾,用于數據匯總 2009-09-03 22:13 kissjava
          @的
          呵呵,是嗎?我運行沒問題呀

            回復  更多評論
            

          # re: Flex Hack 02:DataGrid列尾,用于數據匯總 2010-12-20 15:06 fff
          當你把datagrid的屬性horizontalScrollPolicy="on"的時候(在下面顯示滾動條)

          這個時候你去拖動列線,改變列寬,右下角的數字就會露到datagrid的外面,有沒有解決辦法?
            回復  更多評論
            

          # re: Flex Hack 02:DataGrid列尾,用于數據匯總 2011-01-09 21:43 圣戰風云
          你給datagrid加一個水平滾動條,你會發現一些BUG  回復  更多評論
            

          # re: Flex Hack 02:DataGrid列尾,用于數據匯總 2013-04-07 16:07 偽大神
          @kissjava
          要是lock了一列,下面的合計行會對不上,這個問題怎么解決?  回復  更多評論
            

          主站蜘蛛池模板: 金寨县| 比如县| 菏泽市| 隆回县| 类乌齐县| 万载县| 永嘉县| 多伦县| 礼泉县| 高台县| 修水县| 和平区| 进贤县| 乌审旗| 炎陵县| 教育| 雅江县| 远安县| 安康市| 勃利县| 新郑市| 西安市| 宜兰县| 崇义县| 金沙县| 崇礼县| 新沂市| 平潭县| 汕头市| 茂名市| 金沙县| 大埔县| 桑日县| 普安县| 孝感市| 平山县| 旅游| 梧州市| 绥棱县| 咸阳市| 博爱县|