2013-02-25 6 views
0

J'ai vraiment besoin de votre aide. Le personnel est avec le problème suivant: J'ai une grille de données où j'ai une colonne appelée: Colonne 2, qui a un nombre fixe et le reste est avec editable columns = true pour que mon client puisse entrer des données. Je souhaite tous depuis que je pourrais inséré manuellement pour appeler une fonction où je fais une comparaison. Cette ligne je change les valeurs ¿¿insérée dans la ligne ne peut pas être supérieure à la valeur de la colonne: Colonne 2colonnes calc dans datagrid

et cela a été fait pour chaque ligne d'échantillon

Line 1: Fixed number ==> 85 
I can get editable columns in column 3: value = 20 
I can get editable columns in column 4: value = 50 
I can get editable columns in column 5: value = 100 

lorsque la valeur est supérieur à la colonne La colonne 2 émet une alerte.

J'utilise Flex 3

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"> 
<mx:ArrayCollection id="arrColl"> 
    <mx:source> 
     <mx:Array> 
      <mx:Object label="Student A" score="85" /> 
      <mx:Object label="Student B" score="48" /> 
      <mx:Object label="Student C" score="71" /> 
      <mx:Object label="Student D" score="88" /> 
      <mx:Object label="Student E" score="24" /> 
      <mx:Object label="Student F" score="64" /> 
      <mx:Object label="Student G" score="76" /> 
      <mx:Object label="Student H" score="76" /> 
      <mx:Object label="Student I" score="93" /> 
      <mx:Object label="Student J" score="88" /> 
      <mx:Object label="Student K" score="48" /> 
      <mx:Object label="Student L" score="76" /> 
     </mx:Array> 
    </mx:source> 
</mx:ArrayCollection> 
<mx:DataGrid x="396" y="309" dataProvider="{arrColl}" editable="true"> 
    <mx:columns> 
     <mx:DataGridColumn headerText="Column 1" dataField="label" /> 
     <mx:DataGridColumn headerText="Column 2" dataField="score" /> 
     <mx:DataGridColumn headerText="Column 3" editable="true" dataField="col1"/> 
     <mx:DataGridColumn headerText="Column 4" editable="true" dataField="col2"/> 
     <mx:DataGridColumn headerText="Column 5" editable="true" dataField="col3"/> 
     <mx:DataGridColumn headerText="Column 6" editable="true" dataField="col4"/> 
     <mx:DataGridColumn headerText="Column 7" editable="true" dataField="col5" /> 
    </mx:columns> 
</mx:DataGrid> 

Répondre

0

Vous devez faire ceci:

  1. rendre éditable = "false" pour la colonne de score pour empêcher l'utilisateur de modifier le fixe valeur
  2. définir une restriction pour les colonnes col1 à col5 pour activer l'entrée uniquement pour les numéros
  3. ajouter une fonction de contrôle pour faire le camparison

Voici mon code:

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"> 
<mx:Script> 
    <![CDATA[ 
     import mx.controls.Alert; 
     import mx.controls.TextInput; 
     import mx.events.DataGridEvent; 
     import mx.events.DataGridEventReason; 

     protected function checkInput(event:DataGridEvent):void 
     { 
      if (event.reason == DataGridEventReason.NEW_ROW || event.reason == DataGridEventReason.NEW_COLUMN) 
      { 
       var editor:TextInput = (event.currentTarget as DataGrid).itemEditorInstance as TextInput; 
       var text:String = editor.text; 

       if(event.dataField == "col1" || event.dataField == "col2" || event.dataField == "col3" || event.dataField == "col4" || event.dataField == "col5") 
       { 
        if(int(text) > int(event.itemRenderer.data.score)) 
        {       
         editor.text = ""; 

         event.preventDefault(); 

         Alert.show(text + " is too big!"); 

         return; 
        } 
       } 
      } 
     } 

    ]]> 
</mx:Script> 
<mx:ArrayCollection id="arrColl"> 
    <mx:source> 
     <mx:Array> 
      <mx:Object label="Student A" score="85"/> 
      <mx:Object label="Student B" score="48"/> 
      <mx:Object label="Student C" score="71"/> 
      <mx:Object label="Student D" score="88"/> 
      <mx:Object label="Student E" score="24"/> 
      <mx:Object label="Student F" score="64"/> 
      <mx:Object label="Student G" score="76"/> 
      <mx:Object label="Student H" score="76"/> 
      <mx:Object label="Student I" score="93"/> 
      <mx:Object label="Student J" score="88"/> 
      <mx:Object label="Student K" score="48"/> 
      <mx:Object label="Student L" score="76"/> 
     </mx:Array> 
    </mx:source> 
</mx:ArrayCollection> 
<mx:DataGrid x="396" y="309" dataProvider="{arrColl}" editable="true" itemEditEnd="checkInput(event)"> 
    <mx:columns> 
     <mx:DataGridColumn headerText="Column 1" dataField="label" editable="false"/> 
     <mx:DataGridColumn headerText="Column 2" dataField="score" editable="false"/> 

     <mx:DataGridColumn headerText="Column 3" editable="true" dataField="col1"> 
      <mx:itemEditor> 
       <mx:Component> 
        <mx:TextInput restrict="0-9"/> 
       </mx:Component> 
      </mx:itemEditor> 
     </mx:DataGridColumn> 

     <mx:DataGridColumn headerText="Column 4" editable="true" dataField="col2"> 
      <mx:itemEditor> 
       <mx:Component> 
        <mx:TextInput restrict="0-9"/> 
       </mx:Component> 
      </mx:itemEditor> 
     </mx:DataGridColumn> 

     <mx:DataGridColumn headerText="Column 5" editable="true" dataField="col3"> 
      <mx:itemEditor> 
       <mx:Component> 
        <mx:TextInput restrict="0-9"/> 
       </mx:Component> 
      </mx:itemEditor> 
     </mx:DataGridColumn> 

     <mx:DataGridColumn headerText="Column 6" editable="true" dataField="col4"> 
      <mx:itemEditor> 
       <mx:Component> 
        <mx:TextInput restrict="0-9"/> 
       </mx:Component> 
      </mx:itemEditor> 
     </mx:DataGridColumn> 

     <mx:DataGridColumn headerText="Column 7" editable="true" dataField="col5"> 
      <mx:itemEditor> 
       <mx:Component> 
        <mx:TextInput restrict="0-9"/> 
       </mx:Component> 
      </mx:itemEditor> 
     </mx:DataGridColumn> 

    </mx:columns> 
</mx:DataGrid> 
</mx:Application> 
+0

Wow !! Très agréable!! Très très merci pour votre aide. exactement l'aide dont j'avais besoin. Je suis très reconnaissant. J'ai fait une légère modification pour laisser le script si quelqu'un a besoin d'avenir. Mais cela m'a donné une base parfaite pour que ça s'améliore. Je veux remercier votre aide! – Eduardo

0
<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"> 
<mx:Script> 
<![CDATA[ 
    import mx.controls.Alert; 
    import mx.controls.TextInput; 
    import mx.events.DataGridEvent; 
    import mx.events.DataGridEventReason; 

    [Bindable] 
    var Acumula:int = 0; 

    protected function checkInput(event:DataGridEvent):void 
    { 


     if (event.reason == DataGridEventReason.NEW_ROW || event.reason == DataGridEventReason.NEW_COLUMN) 
     { 
      var editor:TextInput = (event.currentTarget as DataGrid).itemEditorInstance as TextInput; 
      var text:String = editor.text; 
      var myEditor:TextInput = TextInput(event.currentTarget.itemEditorInstance); 


      Acumula += int(myEditor.text); 
      if(int(Acumula) > int(event.itemRenderer.data.score)) 
       {       
        Acumula = 0; 

        event.preventDefault(); 

        Alert.show(text + "ULTRAPASSOU!"); 

        return; 
       } 

     } 
    } 

]]> 
</mx:Script> 
<mx:ArrayCollection id="arrColl"> 
<mx:source> 
    <mx:Array> 
     <mx:Object label="Student A" score="85"/> 
     <mx:Object label="Student B" score="48"/> 
     <mx:Object label="Student C" score="71"/> 
     <mx:Object label="Student D" score="88"/> 
     <mx:Object label="Student E" score="24"/> 
     <mx:Object label="Student F" score="64"/> 
     <mx:Object label="Student G" score="76"/> 
     <mx:Object label="Student H" score="76"/> 
     <mx:Object label="Student I" score="93"/> 
     <mx:Object label="Student J" score="88"/> 
     <mx:Object label="Student K" score="48"/> 
     <mx:Object label="Student L" score="76"/> 
    </mx:Array> 
</mx:source> 
</mx:ArrayCollection> 
<mx:DataGrid x="10" y="28" dataProvider="{arrColl}" editable="true" itemEditEnd="checkInput(event)"> 
<mx:columns> 
    <mx:DataGridColumn headerText="Column 1" dataField="label" editable="false"/> 
    <mx:DataGridColumn headerText="Column 2" dataField="score" editable="false"/> 

    <mx:DataGridColumn headerText="Column 3" editable="true" dataField="col1"> 
     <mx:itemEditor> 
      <mx:Component> 
       <mx:TextInput restrict="0-9"/> 
      </mx:Component> 
     </mx:itemEditor> 
    </mx:DataGridColumn> 

    <mx:DataGridColumn headerText="Column 4" editable="true" dataField="col2"> 
     <mx:itemEditor> 
      <mx:Component> 
       <mx:TextInput restrict="0-9"/> 
      </mx:Component> 
     </mx:itemEditor> 
    </mx:DataGridColumn> 

    <mx:DataGridColumn headerText="Column 5" editable="true" dataField="col3"> 
     <mx:itemEditor> 
      <mx:Component> 
       <mx:TextInput restrict="0-9"/> 
      </mx:Component> 
     </mx:itemEditor> 
    </mx:DataGridColumn> 

    <mx:DataGridColumn headerText="Column 6" editable="true" dataField="col4"> 
     <mx:itemEditor> 
      <mx:Component> 
       <mx:TextInput restrict="0-9"/> 
      </mx:Component> 
     </mx:itemEditor> 
    </mx:DataGridColumn> 

    <mx:DataGridColumn headerText="Column 7" editable="true" dataField="col5"> 
     <mx:itemEditor> 
      <mx:Component> 
       <mx:TextInput restrict="0-9"/> 
      </mx:Component> 
     </mx:itemEditor> 
    </mx:DataGridColumn> 

</mx:columns> 
</mx:DataGrid> 
<mx:Label x="164" y="211" text="{Acumula}"/> 
</mx:Application>