2017-02-28 7 views
0
UltraGrid dgSomeGrid = new UltraGrid(); 


if (((someDS.someDT)dgSomeGrid.DataSource).Any(x => x.ColumnA == someCode)) 
{ 

} 

上記のコードでは、行の1つが削除されたため例外がスローされました。これは先に投稿したのと同じ問題です:Error: Deleted row information cannot be accessed through the rowDataRowVersion.OriginalをLambdaに適用する方法は?

解答によると、解決方法はrowVersionを調べることができるので、DataRowVersion.Originalを上記のLambda式にループするのではなく、どのように適用するのだろうか?

+0

あなたは試しましたか?(x => x ["ColumnA"、DataRowVersion.Original] == someCode)) ' – Pikoh

+0

@Pikoh'意図しない参照比較。値の比較を取得するには、左側に文字列 'をキャストします'? –

+0

試してみましたが、幸運はありません '....(x => Convert.ToString(x [" ColumnA "、DataRowVersion.Original] .ToString())== someCode)' –

答えて

1

DataRowVersionにアクセスするには、DataRowコレクションにアクセスする必要があります。

if (((someDS.someDT)dgSomeGrid.DataSource) 
         .Any(x => x["ColumnA",DataRowVersion.Original].ToString()==someCode)) 

しかし、誰のDataRowのバージョンが存在しない場合(つまりはちょうどこのコードの前AcceptChanges()がされている)ので、あなたはかなり確認したいので、これは、例外をスローします注意する必要があります。だから、このコードが実行する必要がありますそれ:

DataTable dt=(someDS.someDT)dgSomeGrid.DataSource 
bool r; 
if (dt.AsEnumerable().Any(x => x.HasVersion(DataRowVersion.Original))) 
{ 
    r = dt.AsEnumerable().Any(x => x["Column1", DataRowVersion.Original].ToString()==someCode); 
} 
else 
{ 
    r = dt.AsEnumerable().Any(x => x["Column1"].ToString()==someCode); 
} 

編集

ところで、私はそれが既にデルされている値を検索するためにほとんど意味を持っているとして、より良い解決策は、クエリの前にちょうどAcceptChanges()にあることを考えますeted。

関連する問題