豚吐露@wiki

Datagridの任意の行の背景色を変えたい

最終更新:

ohden

- view
管理者のみ編集可

Datagridの任意の行の背景色を変えたい

WindowsXP
Flex SDK 4.1.0


SDKの中のDatagridのsourceを見ると...
%FlashBuilderHome%\sdks\4.1.0\frameworks\projects\framework\src\mx\controls\DataGrid.as
こんな関数がある。
  1. protected function drawRowBackground(s:Sprite, rowIndex:int, y:Number, height:Number, color:uint, dataIndex:int):void
  2. {
  3. var contentHolder:ListBaseContentHolder = ListBaseContentHolder(s.parent);
  4.  
  5. var background:Shape;
  6. if (rowIndex < s.numChildren)
  7. {
  8. background = Shape(s.getChildAt(rowIndex));
  9. }
  10. else
  11. {
  12. background = new FlexShape();
  13. background.name = "background";
  14. s.addChild(background);
  15. }
  16.  
  17. background.y = y;
  18.  
  19. var height:Number = Math.min(height, contentHolder.height - y);
  20.  
  21. var g:Graphics = background.graphics;
  22. g.clear();
  23. g.beginFill(color, getStyle("backgroundAlpha"));
  24. g.drawRect(0, 0, contentHolder.width, height);
  25. g.endFill();
  26. }
  27.  
引数の意味は...
s 対象のスプライト
rowIndex 実際に表示されている行のIndex
y 描画エリアの高さ
height 1行の高さ
color 当該行のデフォルト背景色
dataIndex rowIndexの行に表示されるデータ配列のIndex
です。
で、実際に色を決めてるのは23行目の
g.beginFill(color, getStyle("backgroundAlpha"));
のcolor。
デフォルトではこのメソッドに1行毎に白と薄青っぽぃ色が飛んでくる。
なので、この色設定の近辺をいじれば任意の条件で背景色を変えられる。

やるとしたらDatagridを継承したクラスを作って、drawRowBackground()をoverride。
こんな感じにすると、任意の条件で任意の行の背景色を変えられる。
  1. protected override function drawRowBackground(s:Sprite, rowIndex:int, y:Number, height:Number, color:uint, dataIndex:int):void
  2. {
  3. var contentHolder:ListBaseContentHolder = ListBaseContentHolder(s.parent);
  4.  
  5. var background:Shape;
  6. if (rowIndex < s.numChildren)
  7. {
  8. background = Shape(s.getChildAt(rowIndex));
  9. }
  10. else
  11. {
  12. background = new FlexShape();
  13. background.name = "background";
  14. s.addChild(background);
  15. }
  16.  
  17. background.y = y;
  18.  
  19. var height:Number = Math.min(height, contentHolder.height - y);
  20.  
  21. var g:Graphics = background.graphics;
  22. g.clear();
  23.  
  24. var list:ArrayCollection = dataProvider as ArrayCollection;
  25. if (list) {
  26. var dt:HogehogeRow = list.getItemAt(dataIndex) as HogehogeRow;
  27. if (dt) {
  28. if (dt.redFlg) {
  29. // 赤くしたいフラグがONだったら背景色を赤に設定
  30. g.beginFill(0xFF0000, getStyle("backgroundAlpha"));
  31. } else {
  32. // 赤くしたいフラグがOFFだったら背景色をデフォルトカラー
  33. g.beginFill(color, getStyle("backgroundAlpha"));
  34. }
  35. } else {
  36. // キャスト失敗でデフォルトカラー
  37. g.beginFill(color, getStyle("backgroundAlpha"));
  38. }
  39. } else {
  40. // dataProviderが無かったらデフォルトカラー
  41. g.beginFill(color, getStyle("backgroundAlpha"));
  42. }
  43. g.drawRect(0, 0, contentHolder.width, height);
  44. g.endFill();
  45. }
  46.  
当然、HogehogeRowとかredFlgとかは自分の環境に合わせて書き換える。

このコードで直接コンパイルしとらんけど、動いとるコードを置き換えたりして作ったコードなんで大丈夫のハズ。



更新日: 2011年06月02日 (木) 20時11分23秒

名前:
コメント:

すべてのコメントを見る
記事メニュー
ウィキ募集バナー