我有几个带有自定义单元格渲染器的非常大的数据网格。我面临的问题是,我现在有> 80个这样的数据,每个数据网格每列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函数,或者将变量更改为protected、private或其他什么来获得想要的结果。
对于如何控制这些80+单元格渲染器,任何人都有任何建议。因为我不希望为了排序而需要对它们进行更改……
jc
发布于 2014-08-21 02:39:47
我知道这是一个很晚的回复,你现在很可能已经离开了!
您可以使用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!
干杯
https://stackoverflow.com/questions/13957787
复制相似问题