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


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

} 

Der obige Code warf Ausnahme, weil einer der Zeile gelöscht wurde, ähnliches Problem wie zuvor gepostet: Error: Deleted row information cannot be accessed through the row.Wie man DataRowVersion.Original an Lambda anwendet?

Nach der Antwort, Lösung kann die rowVersion überprüfen, so frage ich mich, wie man DataRowVersion.Original auf den oben genannten Lambda Ausdruck statt Schleifen anwenden?

+0

Haben Sie versucht, '... Any (x => x [" ColumnA ", DataRowVersion.Original] == someCode))' – Pikoh

+0

@ Pikoh 'Mögliche unbeabsichtigte Referenz Vergleich; Um einen Wertvergleich zu erhalten, streichen Sie die linke Seite, um string einzugeben. –

+0

Versucht aber kein Glück '.... Any (x => Convert.ToString (x [" ColumnA ", DataRowVersion.Original] .ToString()) == someCode)' –

Antwort

1

Um auf die DataRowVersion zuzugreifen, müssen Sie es tun, indem Sie auf die DataRow Sammlung zugreifen. So sollte dieser Code tun:

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

Aber Sie müssen vorsichtig sein, denn wenn es keine DataRow Versionen ist (dh es eine AcceptChanges() war kurz vor diesem Code), würde dies eine Ausnahme werfen, so würde man eher überprüfen es:

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

bearbeiten

BTW

, denke ich, dass eine bessere Lösung ist, einfach AcceptChanges() vor Ihrer Anfrage, da es wenig Sinn für Werte zu suchen, die bereits del gewesen eted.

Verwandte Themen