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)"/>

最初に列をソートするまで、これは正常に機能します。次に、新しい行は、指定されたインデックスではなく、最初または最後のインデックスに配置されます。column-value が null であっても、一般的な sort-feature を使用して特定のインデックスに新しい行を配置するにはどうすればよいですか?

4

1 に答える 1

0

null値が上部または下部に追加される理由は、並べ替えがオンになっているためです。ソートがascnull値の場合、常に先頭に追加されます。並べ替えが含まれている場合は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>

新しい行が作成されるたびに1つの数値を増やしました。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 に答える