我在屏幕上有 2 个 flex 数据网格。用户可以从任一数据网格中选择一个或多个行并将它们移动到另一个数据网格。进入应用程序时,下方表格为空。例如:
Item Color Price
--------------------
item57 red $5.55
item62 blue $5.29
item808 green $2.21
Row Item Color Price
---------------------------
请注意,有一列对底部数据网格上的行进行编号(仅)。
例如,当我进入应用程序并从顶部到底部网格移动 3 行时,行号很好(它们显示第 1、2 和 3 行)。例如:
Item Color Price
--------------------
Row Item Color Price
---------------------------
1 item57 red $5.55
2 item62 blue $5.29
3 item808 green $2.21
例如,如果我将底部网格中的第 1 行移回顶部...
Item Color Price
--------------------
item57 red $5.55
Row Item Color Price
---------------------------
1 item62 blue $5.29
2 item808 green $2.21
然后再次回到底部网格......
Item Color Price
--------------------
Row Item Color Price
---------------------------
1 item62 blue $5.29
2 item808 green $2.21
1 item57 red $5.55
行号应该显示 3,因为它插入到列表末尾的底部网格中,但是当它这样做时,它会显示(旧)行号值 1。
当我调试并查看 dataprovider = _myData 时,我看到有rowNumber
问题的行的值(对于上面的 item57)等于 3(应该如此)。但是,它在下部数据网格中显示为 1。
dataprovider 值与 DataGrid 中显示的值有何不同?
[我还可以调试和查看gridLower
列信息,它还显示了有rowNumber
问题的数据的正确值 3。]
较低的数据网格类似于以下内容(尽管我使用的是自定义 itemRenderer,此处为简单起见将其删除):
[Bindable]
private var _myData:ListCollectionView=new ListCollectionView(new ArrayList());
...
<s:DataGrid dataProvider="{_myData}">
<s:columns>
<fx:Array>
<s:GridColumn id="gridLower" headerText="myHeader" dataField="rowNumber"/>
...
将上表的行添加到下表的函数是:
private function addRow():void {
var selectedIndices:Object=gridUpper.grid.selectedIndices;
for (var i:int=selectedIndices.length-1;i>=0;i--) {
var item:Object=_upperTableData.removeItemAt(selectedIndices[i]);
item.rowNumber=_myData.length+1;
_myData.list.addItem(item);
}
// I tried adding "_myData.refresh();" here and it had no effect
// I tried adding "ListCollectionView(gridLower.dataProvider).refresh();" and it had no effect
// I tried adding "grid2.dataProvider.refresh();" here but it had no effect
}
更新 1:如果我重新排序下表中的任何列,则会出现正确的值。我似乎正在观察此链接中报告的内容:
http ://www.barneyb.com/barneyblog/2007/06/23/another-flex-weirdnessgotcha/
虽然还没有找到解决方案。addRow()
请参阅上面我的功能中的尝试。我在正确的轨道上吗?
更新 2:虽然重新排序手动更正了较低网格中的数据,但我还没有找到一种以编程方式执行此操作的方法。我尝试插入:
_myData.sort=null;
var complete:Boolean=_myData.refresh();
就在上述addRow()
功能结束之前,但它并没有解决我的问题。调试时,complete
为真,但下方网格仍显示陈旧数据。