我有一個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. 如何更改Postgres的維護數據庫?
- 6. 如何在Silverlight DataGrid更新綁定數據時進行更改?
- 7. 如何更改選擇選項下拉列表中的數據
- 8. 如何在選擇UITableViewCell時更改textLabel?
- 9. 如何在選擇選項更改時更改值?
- 10. 更新Django網站時如何維護用戶數據?
- 11. WPF treeview和datagrid選擇已更改
- 12. 如何更改選定的DataGrid行
- 13. 如何更改列值並在數據庫中進行選擇
- 14. 維護數據
- 15. 如何在二維數組中隨機選擇數據
- 16. 如何根據選擇選項更改變量的值:選中
- 17. 如何維護主Jframe的數據?
- 18. 如何在更改時更改http選擇?
- 19. 如何根據列表框選擇更新DataGrid的ItemsSource
- 20. 如何動態更改UI的選擇在angularjs中選擇
- 21. 選擇時更改選項
- 22. 如何根據Ajax請求更改選擇框選擇選項
- 23. 如何根據用戶在HTML選擇中的選擇更改字段?
- 24. 再從數據庫中獲得數據,更改選擇選項
- 25. 如何在應用程序版本更新時在iPhone上的SQLite數據庫中維護數據?
- 26. 如何將更改後的datagrid值保存到數據表中?
- 27. 更改/維護區域在magento
- 28. 如何在WPF中選擇單元格時選擇DataGrid單元格內的TextBox?
- 29. 如何在更改下拉列表中選擇的值時更改數據背景顏色
- 30. 如何根據另一列值更改生成列中選擇的選擇值在表中更改
您是否希望保持所選位置,即使所選項目改變了?或者你是否想維護選定的項目,即使它處於新的位置? – invertedSpear 2010-04-06 15:46:56