2012-12-19 3 views
1

커스텀 셀 렌더러가있는 매우 큰 DataGrid가 있습니다. 내가 직면 한 문제는 지금 데이터 그리드 당 각 열에 대해이 중 80 개 이상을 차지한다는 것입니다.as3 다른 변수를 사용하는 DataGrid cellrenderer를 다시 사용합니다.

이러한 셀 렌더러에서 허용되는 것을 정의하기 위해 변수를 전달할 수있는 전역 셀 렌더러 1 개로 줄일 수있는 방법이 있는지 궁금합니다.

예 : I이 허용 무엇을 사용자 정의하는 그 모든 변수를 사용하고 셀 렌더러 내

... 
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 개 이상의 변경 작업을 수행하고 콜백, 제한, 최대 문자를 편집 할 수있게하고, 입력을 제거하고 동적에서 입력 및 다시 변경하는 등의 새로운 작업을 시도 할 때마다 ...

클래스의 인스턴스를 만들고 해당 셀 렌더러를 사용하는 방법이 있는지 알고 싶습니다. 또는 모든 컬럼이 아닌 해당 컬럼에만 영향을주는 변수를 전달할 수 있습니다. 나는 최고는 아니지만, 필자는 필자가 사용하거나, 보호 된, 개인적으로 또는 원하는 결과를 얻기 위해 변수를 변경해야 할 필요가있는 기능을 설정/가져올 수 있다는 인상을 받았다.

누구나 제어 가능한 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에 그 속성을 전달하지 않는다는 것입니다!

건배

관련 문제