【问题标题】:Insert new row into sorted ADG at specific index在特定索引处将新行插入已排序的 ADG
【发布时间】:2013-01-09 16:29:23
【问题描述】:

我尝试在所选行下方的 adg 中插入新行。

<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.XMLListCollection;
        import mx.events.FlexEvent;
        [Bindable]
        protected var worklist:XMLListCollection;

        protected var xml:XML=<items>
                <item><value>1</value></item>
                <item><value>2</value></item>
                <item><value>3</value></item>
                <item><value>4</value></item>
            </items>;

        protected function adg_creationCompleteHandler(event:FlexEvent):void
        {
            var list:XMLList=xml.item;
            worklist=new XMLListCollection(list);
            trace(worklist);
        }

        protected function createBut_clickHandler(event:MouseEvent):void
        {
            var xml:XML=<item/>;
            var selInd:int=adg.selectedIndex;
            var insertPos:int=selInd + 1;
            worklist.addItemAt(xml, insertPos);
        }
    ]]>
</fx:Script>

<s:layout>
    <s:VerticalLayout/>
</s:layout>

<mx:AdvancedDataGrid id="adg"
                     dataProvider="{worklist}"
                     creationComplete="adg_creationCompleteHandler(event)">
    <mx:groupedColumns>
        <mx:AdvancedDataGridColumn dataField="value"/>
    </mx:groupedColumns>
</mx:AdvancedDataGrid>

<s:Button id="createBut"
          label="createRow"
          click="createBut_clickHandler(event)"/>

这工作正常,直到我先对列进行排序。然后新行将放置在第一个或最后一个索引处,而不是指定索引处。如何使用通用排序功能并将新行放置在特定索引处,即使列值为空?

【问题讨论】:

    标签: apache-flex


    【解决方案1】:

    null 值被添加到顶部或底部的原因是因为打开了排序。如果排序在asc 中,则始终会在顶部添加空值。如果排序在desc,则会在底部添加。

    为了更好地理解这一点..试试这个

    <fx:Script>
        <![CDATA[
            import mx.collections.XMLListCollection;
            import mx.events.FlexEvent;
            [Bindable]protected var worklist:XMLListCollection;
            private var newvalue:int = 7;
    
            protected var xml:XML=<items>
                    <item><value>1</value></item>
                    <item><value>2</value></item>
                    <item><value>3</value></item>
                    <item><value>4</value></item>
                    <item><value>5</value></item>
                    <item><value>6</value></item>
                </items>;
    
            protected function adg_creationCompleteHandler(event:FlexEvent):void
            {
                var list:XMLList=xml.item;
                worklist=new XMLListCollection(list);
                trace(worklist);
            }
    
            protected function createBut_clickHandler(event:MouseEvent):void
            {
                var xml:XML=<item><value>{newvalue}</value></item>;
                var selInd:int=adg.selectedIndex;
                var insertPos:int=selInd + 1;
                worklist.addItemAt(xml, insertPos);
                worklist.refresh();
                newvalue++;
            }
        ]]>
    </fx:Script>
    

    每次创建新行时,我都会增加一个数值。 7,8,9 将被添加到顶部或底部(取决于排序)。 10,11,12,........ 将在前一个或下一个(取决于排序)添加到 1,因为该值被视为字符串。

    注意:内部值保存在您想要的确切索引位置。

    编辑

    只需将创建行按钮单击处理程序更改为

    protected function createBut_clickHandler(event:MouseEvent):void
    {
        var xml:XML=<item><value>{newvalue}</value></item>;
        var selectedItem:Object = adg.selectedItem;
        worklist = new XMLListCollection(worklist.source);
        var selInd:int= worklist.getItemIndex(selectedItem);
        var insertPos:int=selInd + 1;
        worklist.addItemAt(xml, insertPos);
        worklist.refresh();
        newvalue++;
    }
    

    这里要做的是.. 当 sort(asc) 打开时,在用户选择了他们想要输入的行之后,然后单击 Create Row.. 我将删除排序并添加所选值旁边的条目..

    如果您希望在整个过程中都进行排序,那么这确实很难。在某些时候,您将不得不删除排序以向用户显示数据的实际位置..

    【讨论】:

    • 感谢您的回答。情况很清楚。但是我怎样才能防止 ADG/XMLListCollection 使用。对我来说,当我有很大的(手动)排序列表并且我喜欢创建一个新行时,这行在顶部或底部,但对于用户不可见,这没有任何意义。对于一个好的解决方案,我将非常感激。
    猜你喜欢
    • 2019-08-17
    • 2019-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-19
    • 2020-05-28
    • 1970-01-01
    • 2011-05-17
    • 2023-04-08
    相关资源
    最近更新 更多