2011-09-07 93 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