2012-12-19 17 views
1

我有几个非常大的数据网格与自定义单元格渲染器。我面临的问题是,我现在有> 80个,每个数据网格每列1个。as3重复使用不同变量的datagrid cellrenderer

我很好奇,如果有一种方法,我可以将它们缩减为1个全局单元格渲染器,我可以将变量传入以定义该列的单元格渲染器允许的内容。

即:

... 
col1 = new DataGridColumn("PurchaseStartDate"); 
     col1.headerText = "Purchase Date (YYYY-MM)"; 
     dg.addColumn(col1); 
      col1.width = 110; 
      col1.editable = false; 
      col1.sortable = false; 
      col1.cellRenderer = Alternating_Row_Colours_editable36; 
       Alternating_Row_Colours_editable36._dg = dg; 
       Alternating_Row_Colours_editable36.__enabled = true; 
       Alternating_Row_Colours_editable36._myCol = 12; 
       Alternating_Row_Colours_editable36._isNum = 3; 
       Alternating_Row_Colours_editable36._stage = this; 
       Alternating_Row_Colours_editable36._maxChars = 9; 
细胞内渲染

我使用所有这些变量的自定义什么是允许的。 即:

... 
public function Alternating_Row_Colours_editable36() 
    { 
     super(); 
      if(_isNum == 0){ 
       restrict = "a-z A-Z @_,.0-9//-"; 
       maxChars = 64; 
      }else if (_isNum == 1){ 
       restrict = ".0-9"; 
       maxChars = 9; 
      }else if (_isNum == 2){ 
       restrict = "0-9"; 
       maxChars = 2; 
      }else if (_isNum == 3){ 
       restrict = "0-9 \\-"; 
       maxChars = 9; 
      }else if (_isNum == 4){ 
       restrict = "0-9. %"; 
       maxChars = 9; 
      } 
      if(_maxChars != -1){ 
       maxChars = _maxChars; 
      } 

,如果你看看上面的问题,我只是指出,我有一个错误。我用“// - ”来代替“\ - ”来跳过连字符。现在,我已经完成了80多项更改,每次尝试添加新内容时,都会进行回调,限制,最大化字符数,使其可编辑,清理输入内容,将其从动态更改为输入,然后再次更改...

我很想知道是否有办法创建该类的实例并使用该单元格渲染器。或者能够传递只影响该列而不是所有列的变量。 我不是最好的,但我的印象是,它可能只是我需要使用的set/get函数,或者将变量更改为受保护的,私有的或其他东西以获得期望的结果。

任何人都有如何将这些80+细胞渲染器置于控制之下的任何建议。因为我不是期待着需要做出改变才能使它们进行排序在路上...

JC

回答

1

我知道这是非常晚的答复,你已经超过现在可能已经移动上!

您可以通过使用CellRenderer类的“的ListData”属性的信息做到这一点:

// Create a private class level variable called _dataField... 
private var _dataField:String; 

// Assign the dataField... 
public function set listData(value:ListData):void { 
    _listData = value;     

    this._dataField = DataGridColumn(DataGrid(this._listData.owner).columns[this._listData.column]).dataField; 

    // set the data again now... 
    this.data = _data;   

    invalidate(InvalidationType.DATA); 
    invalidate(InvalidationType.STATE); 
} 

// Use the dataField when setting value from DataProvider... 
public function set data(value:Object):void {       
    _data = value;   
    if (this._dataField != "") 
    { 
     this.text = value[this._dataField]; 
    }      
} 

希望满足所有的好奇心。耻辱他们不只是首先将该属性传递给CellRenderer!

干杯