2010-08-20 12 views
5

मैं आइटम विक्रेता में डेटाग्रिड कॉलम की डेटा फ़ील्ड तक पहुंचने का प्रयास कर रहा हूं। नीचे डेटा ग्रिड है:फ्लेक्स 3: मैं DataGridColumn के डेटा फ़ील्ड को अपने ItemRenderer में कैसे प्राप्त करूं?

<mx:Script> 
    <![CDATA[ 
     [Bindable] public var weeksOfMoth:ArrayCollection = new ArrayCollection([ 
       {monday:30, tuesday:31, wednesday:1, thursday:2, friday:3, saturday:4, sunday:5}, 
       {monday:6, tuesday:7, wednesday:8, thursday:9, friday:10, saturday:11, sunday:12}, 
       {monday:13, tuesday:14, wednesday:15, thursday:16, friday:17, saturday:18, sunday:19}, 
       {monday:20, tuesday:21, wednesday:22, thursday:23, friday:24, saturday:25, sunday:26}, 
       {monday:27, tuesday:28, wednesday:29, thursday:30, friday:1, saturday:2, sunday:3} 
      ]); 
    ]]> 
</mx:Script> 
<mx:DataGrid dataProvider="{weeksOfMoth}" > 
    <mx:columns> 
     <mx:DataGridColumn itemRenderer="view.DateRenderer" dataField="monday" /> 
     <mx:DataGridColumn itemRenderer="view.DateRenderer" dataField="tuesday" /> 
     <mx:DataGridColumn itemRenderer="view.DateRenderer" dataField="wednesday" /> 
     <mx:DataGridColumn itemRenderer="view.DateRenderer" dataField="thursday" /> 
     <mx:DataGridColumn itemRenderer="view.DateRenderer" dataField="friday" /> 
     <mx:DataGridColumn itemRenderer="view.DateRenderer" dataField="saturday" /> 
     <mx:DataGridColumn itemRenderer="view.DateRenderer" dataField="sunday" /> 
    </mx:columns> 
</mx:DataGrid> 

और ये मेरे ItemRenderer है:

<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" > 
    <mx:Box > 

        <!-- How do I get the dataField here?? --> 
     <mx:Label text="{data[dataField]}" /> 
    </mx:Box> 
</mx:Canvas> 

itemRenderer के सेट डेटा समारोह में, मैं पूरे एक सप्ताह तक (जो ठीक है) प्राप्त करते हैं, लेकिन itemRenderer नहीं करता ' टी किस दिन उपयोग करना है क्योंकि डेटा फ़ील्ड अज्ञात है। क्या किसी को पता है कि इस डेटा तक कैसे पहुंचे आइटम में फ़ील्ड रेंडरर?

उत्तर

7

टिप्पणी www.Flextras.com से मुझे मदद मिली समाधान खोजने के लिए। मैं वास्तव में listData.dataField का उपयोग कर सकता हूं, लेकिन पहले IDropInListItemRenderer कक्षा को लागू करने की आवश्यकता है।

अंतिम ItemRenderer:

<?xml version="1.0" encoding="utf-8"?> 
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" implements="mx.controls.listClasses.IDropInListItemRenderer" > 
    <mx:Script> 
     <![CDATA[ 
      import mx.controls.dataGridClasses.DataGridListData; 
      import mx.controls.listClasses.BaseListData; 


      // Internal variable for the property value. 
      private var _listData:DataGridListData; 

      // Make the listData property bindable. 
      [Bindable("dataChange")] 

      // Define the getter method. 
      public function get listData():BaseListData 
      { 
       return _listData; 
      } 

      // Define the setter method, 
      public function set listData(value:BaseListData):void 
      { 
       _listData = DataGridListData(value); 
      } 

     ]]> 
    </mx:Script> 
    <mx:Box width="80%" height="80%" verticalCenter="0" horizontalCenter="0" backgroundColor="#FFFFFF"> 
     <mx:Label text="{data[_listData.dataField]}" /> 
    </mx:Box> 
</mx:Canvas> 
+0

क्रेंडर्स का जवाब सरल है, और यह भी काम करता है। –

3

DataGridListData कक्षा का उपयोग करें, जो प्रस्तुतकर्ता में पारित किया गया है। इसमें एक डेटा फ़ील्ड संपत्ति है।

मैं बहुत यकीन है कि यह काम करना चाहिए हूँ:

<mx:Label text="{data[listData.dataField]}" /> 
+0

यह संकलन नहीं करता है: "1120: अपरिभाषित संपत्ति listData की पहुँच" । यह शायद एक फ्लेक्स 2 समाधान है, लेकिन मैं फ्लेक्स 3 –

+2

का उपयोग कर रहा हूं जैसा कि आपने पाया है, इसमें डब्ल्यू/फ्लेक्स 2 करने के लिए कुछ भी नहीं है। कई कक्षाएं पहले से ही IDropInListItemRenderer इंटरफ़ेस को लागू करती हैं। विषय से परे; आपको कम कंटेनर का उपयोग करने के लिए अपने आइटम रेंडरर को फिर से काम करने पर विचार करना चाहिए। एक लेबल का उपयोग क्यों न करें? क्या आपको वास्तव में 2 कंटेनर जोड़ने की ज़रूरत है? – JeffryHouser

+0

यह वास्तव में पूरे रेंडरर का केवल एक हिस्सा है, मेरे वास्तविक कोड में इसे वास्तव में कंटेनरों की आवश्यकता होती है।लेकिन आप सही हैं, यहां इस्तेमाल किया गया उदाहरण छोटा हो सकता है। –

2

आप IDropInListItemRenderer लागू करने के लिए नहीं है। यह पर्याप्त है:

data[ (listData as DataGridListData).dataField ] 

ठोस listData प्रकार DataGridListData की है, लेकिन संपत्ति ही है, BaseListData को लिखा गया के बाद से एक रेंडरर विभिन्न परिदृश्यों में इस्तेमाल किया जा सकता है। हालांकि, इस परिदृश्य में हम जानते हैं कि यह डेटाग्रिडलिस्ट डेटा है, इसलिए हम इसे डेटा फ़ील्ड संपत्ति तक पहुंचने के लिए आसानी से डाल सकते हैं।

+0

मैंने अपना नियंत्रण अधिक सामान्य बना दिया, और एक प्रकार की जांच जोड़ा: 'अगर (सूचीडेटा डेटाग्रिडलिस्ट डेटा है) {...} ' –

0

एक एमएक्स AdvancedDataGrid में एक स्पार्क आधारित आइटम रेंडरर के लिए निम्न कार्य:

<?xml version="1.0" encoding="utf-8"?> 
<s:MXAdvancedDataGridItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009" 
            xmlns:s="library://ns.adobe.com/flex/spark" 
            xmlns:mx="library://ns.adobe.com/flex/mx" 
            width="100%" 
            > 
    <fx:Declarations> 
     <!-- Place non-visual elements (e.g., services, value objects) here --> 
    </fx:Declarations> 
    <fx:Script> 
     <![CDATA[    
      import mx.controls.dataGridClasses.DataGridListData; 

      override public function set data(value:Object):void {    
       var latency:Number = value[ (this.listData as DataGridListData).dataField] as Number; 

       lbl.text = Utils.formatLatency(latency); 
       if(latency > 1000000) { // 1s => error 
        lbl.setStyle("backgroundColor", 0xFF8080); 
       } else if(latency > 100000) { // 100ms => warning 
        lbl.setStyle("backgroundColor", 0xFFFF80); 
       } else if(latency > 0){ // low latency 
        lbl.setStyle("backgroundColor", 0x80FF80); 
       } 
      } 
     ]]> 
    </fx:Script> 
    <s:Label id="lbl" width="100%" height="100%" verticalAlign="middle" textAlign="right" paddingRight="5"/> 
</s:MXAdvancedDataGridItemRenderer> 
0

भी सरल: सिर्फ MXDataGridItemRenderer

में गुण

  • advancedDataGridListData MXAdvancedDataGridItemRenderers में
  • dataGridListData का उपयोग

    उस जानकारी तक पहुंचने के लिए।

0

औसत GridItemRenderer के लिए यह तो एक

column.dataField 

है, आपके मामले में यह काम करना चाहिए:

<s:Label text="{data[column.dataField]}" /> 
संबंधित मुद्दे

 संबंधित मुद्दे