Удаление выбранных строк из DataGrid в Flex - PullRequest
1 голос
/ 28 февраля 2011

Я добавил флажок в DataGrid, используя ItemRenderer.Я вставил код, который я использую ниже.

<mx:DataGrid id="dgEmployeeInfo" dataProvider="{resultArray}" x="131" y="95" editable="false">          
        <mx:columns>
            <mx:DataGridColumn headerText="Select" rendererIsEditor="true" editorDataField="selected">
                <mx:itemRenderer>
                    <fx:Component>
                        <mx:HBox>
                            <s:CheckBox id="testChk" click="testChk_clickHandler(event)" selected="{cbSelected}">                                   
                            </s:CheckBox>
                            <fx:Script>
                                <![CDATA[
                                    [Bindable]
                                    public var cbSelected:Boolean; 
                                    protected function testChk_clickHandler(event:MouseEvent):void
                                    {
                                        cbSelected = testChk.selected;  
                                    }
                                ]]>
                            </fx:Script>
                        </mx:HBox>
                    </fx:Component>
                </mx:itemRenderer>
            </mx:DataGridColumn>
            <mx:DataGridColumn headerText="First Name" dataField="firstName"/>
            <mx:DataGridColumn headerText="Last Name" dataField="lastName"/>
            <mx:DataGridColumn headerText="City" dataField="city"/>
            <mx:DataGridColumn headerText="Employee Code" dataField="empCode"/>             
        </mx:columns>       
    </mx:DataGrid>

У меня также есть кнопка вне DataGrid, и когда я нажимаю эту кнопку, я хочу удалить все строки, у которых установлен флажок.Может кто-нибудь сказать мне, как это сделать?

1 Ответ

6 голосов
/ 28 февраля 2011

HI!

Прежде всего, ваш код не будет работать должным образом, так как не каждая строка DataGrid имеет свой экземпляр ItemRenderer.Существует ровно n экземпляров средства визуализации элементов для DataGrid, имеющих n строк VISIBLE.Вы можете легко проверить это, если создадите DataGrid, который не может уместить все данные, а затем выберите несколько строк и прокрутите сетку данных вверх / вниз.Вы увидите неожиданные результаты.

В одном из решений может быть дополнительное поле "выделено" (или как вы хотите его назвать) в свойствах элемента resultArray.Затем вы можете получить доступ к этому свойству через объект «data» ItemRenderer.Проверьте приведенный ниже код:

<?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:Script>
        <![CDATA[
            import mx.collections.ArrayCollection;
            [Bindable]
            private var resultArray:ArrayCollection = new ArrayCollection
                                                ([
                                                {firstName:"1-1",lastName:"1-2",city:"1-3",empCode:"1-4"},
                                                {firstName:"2-1",lastName:"2-2",city:"2-3",empCode:"2-4"},
                                                {firstName:"3-1",lastName:"3-2",city:"3-3",empCode:"3-4"},
                                                {firstName:"4-1",lastName:"4-2",city:"4-3",empCode:"4-4"},
                                                {firstName:"5-1",lastName:"5-2",city:"5-3",empCode:"5-4"},
                                                {firstName:"6-1",lastName:"6-2",city:"6-3",empCode:"6-4"},
                                                {firstName:"7-1",lastName:"7-2",city:"7-3",empCode:"7-4"},
                                                {firstName:"8-1",lastName:"8-2",city:"8-3",empCode:"8-4"},
                                                {firstName:"9-1",lastName:"9-2",city:"9-3",empCode:"9-4"},
                                                {firstName:"10-1",lastName:"10-2",city:"10-3",empCode:"10-4"},
                                            ]);

            protected function button1_clickHandler(event:MouseEvent):void
            {
                for (var i:int=0; i< resultArray.length; i++)
                {
                    if (resultArray[i].selected == true)
                    {
                        resultArray.removeItemAt(i);
                    }
                }

                dgEmployeeInfo.invalidateList();
            }

        ]]>
    </fx:Script>



    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
    </fx:Declarations>

    <s:VGroup>
        <mx:DataGrid id="dgEmployeeInfo" dataProvider="{resultArray}" x="131" y="95" editable="false">          
            <mx:columns>
                <mx:DataGridColumn headerText="Select" rendererIsEditor="true" editorDataField="selected">
                    <mx:itemRenderer>
                        <fx:Component>
                            <mx:HBox>
                                <s:CheckBox id="testChk" click="testChk_clickHandler(event)" selected="{data.selected}">
                                    <fx:Script>
                                        <![CDATA[
                                            [Bindable]
                                            public var cbSelected:Boolean; 
                                            protected function testChk_clickHandler(event:MouseEvent):void
                                            {
                                                data.selected = testChk.selected;  
                                            }
                                        ]]>
                                    </fx:Script>                                
                                </s:CheckBox>
                            </mx:HBox>
                        </fx:Component>
                    </mx:itemRenderer>
                </mx:DataGridColumn>
                <mx:DataGridColumn headerText="First Name" dataField="firstName"/>
                <mx:DataGridColumn headerText="Last Name" dataField="lastName"/>
                <mx:DataGridColumn headerText="City" dataField="city"/>
                <mx:DataGridColumn headerText="Employee Code" dataField="empCode"/>             
            </mx:columns>       
        </mx:DataGrid>
        <mx:Button label="Delete Items" click="button1_clickHandler(event)"/>
    </s:VGroup> 


</s:Application>

Я использовал ArrayCollection в качестве dataProvider, так как гораздо проще добавлять / удалять элементы в объектах Collection, чем с помощью массивов.

С уважением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...