2011-08-08 5 views
0

데이터 제공자의 값을 수정하지 않도록 렌더러를 그리드에 적용하는 방법이 있습니까? DataGrid가 있고 그 열 중 하나에서 set 데이터 함수를 재정의하고 dataprovider의 숫자 값을 단어로 변환하는 고객 렌더러가 있습니다. 내 문제는 그 열을 기준으로 표를 정렬 할 때 새로운 값으로 정렬하는 반면 원래는 dataprovider에 있던 이전 값으로 정렬하기를 원한다는 것입니다. dataProviders에서는 수정하지 않는,데이터 제공자를 변경하지 않는 렌더러

public class MyRenderer extends Text { 

    override public function set data(value:Object):void { 
     super.data = value; 
     data[DataGridListData(listData).dataField] = MyClass.convertValue(data[DataGridListData(listData).dataField]); 
     super.invalidateDisplayList(); 
    } 
} 

답변

2

문제는이 라인입니다.

사용자 정의 렌더러를 사용하는 대신 해당 필드에서 convertValue를 수행하는 labelFunction을 사용하면됩니다. 그런 다음 비 사용자 지정 렌더러는 DataGridListData에서 레이블 값을 가져 와서 표시된 값으로 사용합니다.

+0

labelFunction의 존재를 알지 못했지만, 렌더러보다 내가 성취해야 할 부분에 더 적합하다고 생각합니다. 렌더러 대신 렌더러를 사용해야했습니다. labelFunction을 사용하도록 코드의 일부를 변경했으며 초기 결과는 유망 해 보입니다. 감사. – supercooldude

+0

플렉스 팀은 완벽하지는 않지만 꽤 똑똑합니다. Flex가 "해야"한다고 생각하면 뭔가를 찾으십시오. 대부분의 경우, 그것은 ... 당신은 단지 그것을 찾을 필요가 있습니다 :) –

2

ItemRenderers, 기본적으로 :

여기 내 렌더러입니다. 코드를 표시하지 않았으므로 작성한 코드가 dataProvider를 수정했는지 여부를 알기가 어렵습니다.

그리드에 표시된 값에 관계가없는 dataProvider의 값을 기반으로 DataGrid를 정렬하려고합니다. DataGrid에서 sortCompareFunction을 사용해야합니다. 바로 거기

data[DataGridListData(listData).dataField] = MyClass.convertValue(data[DataGridListData(listData).dataField]); 

, 당신은 다른 값으로 필드 값을 설정하는 :

+0

위의 렌더러 코드를 게시했습니다. 도움이 되었기를 바랍니다. – supercooldude

관련 문제