自定义Datagrid列可见性

时间:2011-09-07 06:27:29

标签: xml datagrid flex4

我正在使用XML文件中的数据加载datagrid,如下例所示。我的XML文件由4列数据组成,显示在我的数据网格中。但是我希望datagrid只显示基于我提供的ArrayList的某些列。在此示例中,ArrayList由两列组成,即“Id”和“Name”。我想知道做我想做的最好的方法是什么。因为它我已经加载了网格,我想循环遍历列并检查列名是否包含在列表中,如果不可见,我将其宽度设置为零。

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.

1 个答案:

答案 0 :(得分:0)

public class MyDataGridTextColumn:DataGridTextColumn {     #region public Visibility 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

}