2011-09-07 95 views
0

我正在加載我的數據網格,數據來自XML文件,如下例所示。我的XML文件由顯示在我的數據網格中的4列數據組成。但是我希望datagrid只顯示基於我提供的ArrayList的某些列。在這個例子中,ArrayList由兩個列組成,即「Id」和「Name」。我想知道什麼是做我想做的最好的方式。因爲它已經加載了網格,我想遍歷列並檢查列名是否包含在列表中,如果不可見,我將其寬度設置爲零。自定義Datagrid列的可見性

Or is there another way whereby before loading the grid itself I can do checks between the datagrid dataProvider and the ArrayList, and then populate the grid accordingly. So here the visible attribute will not be used. 

Anyone who can put some light on this? 


MY MXML 
<?xml version="1.0" encoding="utf-8"?> 
    <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
        xmlns:s="library://ns.adobe.com/flex/spark" 
        xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"> 
     <fx:Declarations> 
      <fx:XML id="order" source="orderlist.xml"/> 
      <s:XMLListCollection id="show" source="{order.order}"/> 
     <s:ArrayList id="mylist"> 
      <String>Id</String> 
       <String>Name</String> 
    </s:ArrayList> 
     </fx:Declarations> 
     <mx:DataGrid dataProvider="{show}" rowCount="4"> 
      <mx:columns> 
       <mx:DataGridColumn headerText="Order number" dataField="Id" /> 
       <mx:DataGridColumn headerText="Name" dataField="Name" /> 
       <mx:DataGridColumn headerText="Surname" dataField="Surname" /> 
       <mx:DataGridColumn headerText="Age" dataField="Age"/> 
      </mx:columns> 
     </mx:DataGrid> 

     <s:Button id="test_btn" click="Handler_to_set_DatagridColumns();"/> 


    </s:Application> 



MY XML FILE 

    <?xml version="1.0" encoding="utf-8"?> 
    <Orderlist> 
     <order Id="1" Name="Albert" Surname="Schineider" Age="45"/> 
     <order Id="2" Name"Sara" Surname="Gutierrez" Age="25"/> 
     <order> Id="3" Name="Alain" Surname='Bulquee" Age="40"/>  
    </Orderlist> 



Thanks for your help. 

回答

0

公共類MyDataGridTextColumn:DataGridTextColumn { #地區的公共能見度MyVisibility

public static readonly DependencyProperty MyVisibilityProperty = 
    DependencyProperty.Register("MyVisibility", typeof(Visibility), typeof(MyDataGridTextColumn), new PropertyMetadata(Visibility.Visible, OnMyVisibilityPropertyChanged)); 

private static void OnMyVisibilityPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) 
{ 
    var @this = d as MyDataGridTextColumn; 

    if (@this != null) 
    { 
     @this.OnMyVisibilityChanged((Visibility)e.OldValue, (Visibility)e.NewValue); 
    } 
} 

private void OnMyVisibilityChanged(Visibility oldValue, Visibility newValue) 
{ 
    Visibility = newValue; 
} 

public Visibility MyVisibility 
{ 
    get { return (Visibility)GetValue(MyVisibilityProperty); } 
    set { SetValue(MyVisibilityProperty, value); } 
} 

#endregion public Visibility MyVisibility 

}

+0

能否請您解釋一下上面的代碼? 謝謝 – FlexyBoz