0

PLinqInstantFeedbackSourceグリッドにデータを入力するときに使用しています。

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();
}

したがって、次を使用してすべての行を選択すると、次のようになります。

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

すべての行を選択しているようです。したがって、これは正常に機能していますが、すべての行が表示またはフェッチされるようにユーザーが下にスクロールしていません。

だから今、私はすべての行をループし、以下を使用して行オブジェクトを取得したいと思います:

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のすべての行を取得する方法。

4

2 に答える 2

1

LinqInstantFeedBackSource は、別のスレッドでサーバーからグリッドにレコードをロードします。対応するレコードがまだロードされていないグリッド内の行にアクセスしようとすると、ソースはそのNotLoadedObjectタイプのオブジェクトを返します。レコードの読み込みはバックグラウンドで行われるため、「実際の」データが得られるまで行のクエリを繰り返すことができます。

foreach (var item in selectedRowHandles)
{
    while (gridControl.GetRow(item) is NotLoadedObject)
    {
             Application.DoEvents();
     }
    SomeViewModel.SelectedItems.Add((SomeEntityObject)gridControl.GetRow(item)); 
}
于 2013-01-23T19:55:16.403 に答える
0

DevExpressから正しい答えを見つけました。

于 2013-01-25T09:47:55.577 に答える