2011-09-20 4 views
0

J'ai besoin de votre aide pour suivre.Flex Datagrid avec liens conditionnels

J'ai une grille de données qui utilise une liste à étages en tant que fournisseur de données. Maintenant, mon requirment est dans cette liste, j'ai un statusId comme une variable ou une propriété que j'affirme comme l'une des colonnes de DataGrid. Maintenant, j'ai une autre colonne où je dois afficher trois liens comme modifier, supprimer et afficher qui sera basé sur le statusid. pouvez-vous me donner une idée ou un exemple

Répondre

1

Je ne suis pas un expert Flex, mais généralement, lorsque vous voulez personnaliser l'apparence d'une colonne dans un DataGrid, vous utilisez un ItemRenderer, comme indiqué par votre tag. Dans le rendu d'élément, vous pouvez utiliser des composants Label et définir une sélection d'attributs qui leur donnent l'aspect de liens, puis les activer ou les désactiver en fonction de votre condition.

Voici quelques exemples de code du haut de ma tête, avec les mises en garde suivantes:

  • J'utilise un MX DataGrid au lieu de la Spark DataGrid.
  • J'utilise un moteur de rendu d'élément en ligne pour plus de commodité, mais il est préférable d'externaliser vos moteurs de rendu d'éléments dans des fichiers MXML distincts.

    <mx:DataGrid id="dataGrid" dataProvider="{dataProvider}" ...> 
        <mx:columns> 
         <mx:DataGridColumn id="status_id_column" dataField="statusId" headerText="Status" /> 
         <mx:DataGridColumn id="action_column"> 
          <mx:itemRenderer> 
           <fx:Component> 
            <mx:Label text="View" paddingLeft="10" useHandCursor="true" buttonMode="true" mouseChildren="false" enabled="Your condition goes here" /> 
            <mx:Label text="Edit" paddingLeft="10" useHandCursor="true" buttonMode="true" mouseChildren="false" enabled="Your condition goes here" /> 
            <mx:Label text="Delete" paddingLeft="10" useHandCursor="true" buttonMode="true" mouseChildren="false" enabled="Your condition goes here" /> 
           </fx:Component> 
          </mx:itemRenderer> 
         </mx:DataGridColumn> 
        </mx:columns> 
    </mx:DataGrid> 
    
0

merci pour votre aide avik est partiellement correcte que pour moi, il y a beaucoup de conditions je ne peux pas le mettre dans l'attribut activé. de toute façon j'ai eu la solution de mon côté :)

voici la syntaxe.

<mx:HBox width="100%"> 
    <mx:DataGrid id="reportDataGrid" dataProvider="{reportDataGridArrayCollection}" 
     variableRowHeight="true" editable="false" rowHeight="75" 
     width="100%" height="400" allowDragSelection="false" 
     draggableColumns="false" textAlign="center"> 
    <mx:columns> 
    <mx:DataGridColumn sortable="false" dataField="reportId" resizable="false" headerText="" width="0.06" editable="false" textAlign="center"/> 
      <mx:DataGridColumn resizable="false" headerStyleName="centered" textAlign="left" dataField="reportStatusId" headerWordWrap="true" headerText="Status" width="0.21"> 
    </mx:DataGridColumn> 
    <mx:DataGridColumn resizable="false" headerStyleName="centered" textAlign="left" dataField="lockedByUser" headerWordWrap="true" headerText="Locked (Worked) By" width="0.10"/> 

    <mx:DataGridColumn resizable="false" headerStyleName="centered" textAlign="left" dataField="" headerWordWrap="true" headerText="Acion" width="0.20"> 
     <mx:itemRenderer> 
     <fx:Component> 
     <mx:HBox textAlign="left" width="100%" creationComplete="init1()" > 
     <fx:Script> 
     <![CDATA[ 

      public function init1():void { 
      if(data.reportStatusId==0) { 
      viewLnk.visible = true; 
      viewLnk.includeInLayout = true; 
    // this is my condition which you can ignore....   if((data.entityId==1 || data.entityId==2 || data.entityId==3 || data.entityId==4)   ){ 
      editLnk.visible = true; 
      editLnk.includeInLayout = true; 
      } 
      } 
      if(data.reportStatusId==1 
      ) { 
      editLnk.visible = true; 
      editLnk.includeInLayout = true; 
      } 
      if(data.reportStatusId==2) { 
      reviewLnk.visible = true; 
      reviewLnk.includeInLayout = true; 
      } 
      if(data.reportStatusId==3) { 
      saveXMLLnk.visible = true; 
      saveXMLLnk.includeInLayout = true; 
      } 
      } 
     ]]> 
     </fx:Script> 
     <mx:LinkButton id="editLnk" visible="false" includeInLayout="false" label="Edit" click="outerDocument.editReport(data.reportId)"/> 
     <mx:LinkButton id="viewLnk" visible="false" includeInLayout="false" label="View" click="outerDocument.viewReport(data.reportId)"/> 
     <mx:LinkButton id="reviewLnk" visible="false" includeInLayout="false" label="Review" click="outerDocument.reviewReport(data.reportId)"/> 
      <mx:LinkButton id="saveXMLLnk" visible="false" includeInLayout="false" label="Save XML" click="outerDocument.saveXMLReport(data.reportId)"/> 

     </mx:HBox> 
     </fx:Component> 
     </mx:itemRenderer> 
    </mx:DataGridColumn> 
    </mx:columns> 
    </mx:DataGrid> 
    </mx:HBox>