我有一个DataGrid,我将DataProvider设置为我的数据。当我的数据发生变化时,DataGrid会丢失选定的行,滚动条跳回顶部。我如何保持选择和滚动位置?如何在数据更改时维护DataGrid中的选择?
回答
如果你只是想保持仓位:
在任何功能改变数据,第一个捕捉到选定的指数
var myidx:int = new int(myDG.selectedIndex);
和滚动位置
var myVertPos:int = new int(myDG.verticalScrollPosition);
运行代码改变数据,然后向上进行倒退:
myDG.selectedIndex = myidx;
myDG.verticalScrollPosition = myVertPos;
哦,你可能会想做一个检查,以确保所选择的索引不会超过DG中现在项目的长度,并选择最后一个。根据我的经验,设置大于最大值的垂直滚动位置只会导致滚动到最大值。
如果新的dataProvider将selectedItem放入不同的索引中,这可能会如何工作? – Robusto 2010-04-06 16:25:28
它不..这就是为什么我试图问OP的意图(维护项目,或维护索引)我想你可能可以通过使用'var myItem:Object = myDG'来维护该项目。 selectedItem;'和'myDG.selectedItem = myItem;'但我不知道如何在没有大量测试的情况下解决这个问题。然后,您需要以某种方式找到滚动位置......维护该项目要复杂得多:-) – invertedSpear 2010-04-06 17:40:43
由于我列表中的项目数量没有变化,因此这似乎工作得很好,只是关联的数据。谢谢。 – 2010-04-06 18:15:43
有一种方法。您需要扩展DataGrid类并添加一个String属性uniqueIdField。
将uniqueIdField的值设置为数据集中唯一对象的属性。
然后覆盖设置的dataProvider方法如下: 这将工作,如果列没有排序。修复* 我现在遇到这样的问题,即当列对正确的行高亮进行排序,但滚动条不会变为该值(因为它影响排序的属性之一已更改)。 *
下面的代码将滚动条设置到正确的位置。
覆盖公共功能设置的dataProvider(值:对象):无效 { VAR VSCROLL:= 0; //检查是否我们重新选择先前选择的项目 //如果(uniqueIdField.length> 0 & &将selectedItem!= NULL)保存当前现在的位置是 { uniqueIdData = this.selectedItem [uniqueIdField]; vScroll = this.verticalScrollPosition; }
super.dataProvider = value;
if(uniqueIdField.length > 0
&& uniqueIdData != null
&& selectedItems.length <= 1)
{
变种currentObj:对象; var found:Boolean = false;
if(dataProvider is ArrayCollection)
{
//find object in dataprovider
for(var i:int=0; i < dataProvider.length; i++)
{
currentObj = dataProvider.getItemAt(i);
if(currentObj[uniqueIdField] == uniqueIdData)
{
this.selectedItem = currentObj;
found = true;
vScroll = this.selectedIndex;
break;
}
}
if(!found)
{
this.selectedItem = null;
uniqueIdData = null;
}
}
//通知该项目已经被选择,发现或空 this.verticalScrollPosition = VSCROLL; dispatchEvent(new ListEvent(ListEvent。更改));
}
- 1. WPF在选项卡更改时维护列表框选择
- 2. 在UISegmentedControl中维护选择
- 3. 如何维护数据库中的历史更改
- 4. 如何在方向更改期间维护碎片数据?
- 5. 角度更新模型数据维护选择列表中的选定选项
- 6. 如何更改Postgres的维护数据库?
- 7. 如何在Silverlight DataGrid更新绑定数据时进行更改?
- 8. 在更改下拉菜单中的选择时改变数据
- 9. 根据datagrid中的选择更改ColumnHeaderStyle的背景颜色
- 10. mod_rewrite维护“更改的URI”
- 11. 如何在另一个选择值更改时更新选择?
- 12. 如何更改选择选项下拉列表中的数据
- 13. 如何在选择UITableViewCell时更改textLabel?
- 14. 如何在选择选项更改时更改值?
- 15. 更新Django网站时如何维护用户数据?
- 16. 如何在多维数组中动态修改我的选择?
- 17. 在QStyledItemDelegate下维护对QComboBox的选择
- 18. WPF DataGrid:如何确定ComboBox选择更改的行的索引?
- 19. 如何在DataGrid的SelectedItems中维护订单?
- 20. 如何更改选定的DataGrid行
- 21. WPF DataGrid取消选择更改
- 22. WPF treeview和datagrid选择已更改
- 23. 如何在页面中更改数据ID后在jQuery中选择数据ID?
- 24. 维护数据
- 25. 如何更改列值并在数据库中进行选择
- 26. 如何在NSUserDefaults中维护单元格选择?
- 27. 如何在二维数组中随机选择数据
- 28. 如何根据选择选项更改变量的值:选中
- 29. 如何在ObserveableCollection属性更改时更新Silverlight中的DataGrid
- 30. 如何维护主Jframe的数据?
您是否希望保持所选位置,即使所选项目改变了?或者你是否想维护选定的项目,即使它处于新的位置? – invertedSpear 2010-04-06 15:46:56