我尝试在我选定的行下面的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)"/>
这是正常的,直到我先对列进行排序。然后,新行将放在第一个或最后一个索引处,而不是指定的索引处。如何使用常规排序功能并将新行放在特定索引处,即使列值为空?
答案 0 :(得分:0)
在顶部或底部添加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
..我将删除排序和添加所选值旁边的条目..
如果你想在整个过程中打开排序,那么它实际上很难......在某些时候你必须删除排序以向用户显示数据的实际位置。