开发者

Customize Datagrid columns visibility

开发者 https://www.devze.com 2023-04-03 08:18 出处:网络
I am loading my datagrid with data from a XML file as the example below. My XML file consists of 4 columns of data that shows into my datagrid. However I want the datagrid to show only certain columns

I am loading my datagrid with data from a XML file as the example below. My XML file consists of 4 columns of data that shows into my datagrid. However I want the datagrid to show only certain columns based on an ArrayList that I am providing. In this example the ArrayList consists of two of the columns namely "Id" and "Name". I want to know what is the best way to do what I want. As it is I have already loaded the grid and I want to loop through the columns and check if the column n开发者_JAVA百科ame is contained in the list, then if not visible I set its width to Zero.

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.


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

}

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号