0

我尝试在所选行下方的 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)"/>

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

4

1 回答 1

0

null在顶部或底部添加值的原因是因为排序已打开。如果排序在asc空值中,则总是会添加到顶部。如果排序是 in 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.. 我将删除排序并将条目添加到所选值旁边..

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

于 2013-01-10T07:43:20.967 回答