2011-09-20 79 views
0

我需要您的幫助。帶有條件鏈接的Flex Datagrid

我有一個使用arraylist作爲數據提供者的數據網格。現在我的要求是在arraylist中,我有一個statusId作爲一個變量或說我顯示爲datagrid中的一列的屬性。現在我有另一列,我必須顯示三個鏈接,如編輯,刪除和查看,這將基於statusid。你可以給我一些想法或例子

回答

1

我不是Flex專家,但通常當你想自定義DataGrid中使用ItemRenderer的列的外觀時,如標籤所示。在項目渲染器中,您可以使用Label組件並設置一系列使它們看起來像鏈接的屬性,然後根據您的條件啓用/禁用它們。

下面是一些示例代碼從我的頭頂,有以下注意事項:

  • 我使用的是MX DataGrid中,而不是在Spark的DataGrid。
  • 爲了方便起見,我使用了內聯項呈示器,但最好將您的項呈示器外化爲單獨的MXML文件。 avik

    <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

感謝您的幫助,這對我來說有很多的條件,我不能把在enabled屬性是部分正確。無論如何,我從我身邊得到了解決方案:)

這裏是語法。

<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>