as3重用具有不同变量的datagrid cellrenderer

时间:2012-12-19 17:24:44

标签: actionscript-3 dynamic datagrid

我有几个非常大的数据网格和自定义单元格渲染器。我面临的问题是我现在有>其中80个,每个数据网格每列1个。

我很好奇是否有办法将这些缩小为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多个更改要做,每次我尝试添加新内容,回调,限制,最大字符,使其可编辑,擦除输入,将其从动态更改为输入然后再返回... < / p>

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

任何人都有关于如何控制这些80多个细胞渲染器的任何建议。因为我不期待需要对它们做出改变以便整理道路......

JC

1 个答案:

答案 0 :(得分: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!

干杯