我有一個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