2013-01-21 40 views
0

填充網格時我使用的是PLinqInstantFeedbackSource在使用PLinqInstantFeedbackSource時獲取GridControl中的所有行

((DevExpress.Xpf.Grid.TableView)gridControl.View).SelectAll();​ 

似乎選擇所有行:

PLinqInstantFeedbackSource pLinqInstantFeedbackDataSource = new PLinqInstantFeedbackSource(); 
pLinqInstantFeedbackDataSource.GetEnumerable += pLinqInstantFeedbackDataSource_GetEnumerable; 

gridControl.ItemsSource = pLinqInstantFeedbackDataSource; 

gridControl.DataContext = SomeViewModel; 

private void pLinqInstantFeedbackDataSource_GetEnumerable(object sender, DevExpress.Data.PLinq.GetEnumerableEventArgs e) 
{ 
    e.Source = SomeViewModel.GetList(); 
} 

所以在使用我選擇的所有行。所以這工作正常,但用戶沒有向下滾動,以便所有行都可見或獲取。

所以現在我要遍歷所有的行,並使用獲得的行對象:

var selectedRowHandles = ((DevExpress.Xpf.Grid.TableView)gridControl.View).GetSelectedRowHandles().AsEnumerable(); 

foreach (var item in selectedRowHandles) 
{ 
    SomeViewModel.SelectedItems.Add((SomeEntityObject)gridControl.GetRow(item)); 
} 

這似乎對所有可見的行工作得很好,但是當它試圖獲取下一行,是不是可見它拋出一個異常:

​InvalidCastException 
Unable to cast object of type 'DevExpress.Data.NotLoadedObject' to type 'SomeEntityObject'.​ 

那麼,如何使用PLinqInstantFeedbackSource時,當行不可見,以獲得在GridControl所有行。

回答

1

LinqInstantFeedBackSource將服務器中的記錄加載到單獨線程中的網格中。如果您嘗試訪問網格中對應的記錄未被全部加載的行,則源返回類型爲NotLoadedObject的對象。由於記錄的加載在後臺進行,您可以重複查詢該行,直到獲得「真實」數據。

foreach (var item in selectedRowHandles) 
{ 
    while (gridControl.GetRow(item) is NotLoadedObject) 
    { 
      Application.DoEvents(); 
    } 
    SomeViewModel.SelectedItems.Add((SomeEntityObject)gridControl.GetRow(item)); 
} 
相關問題