Ho un genitore WinForm che ha un MyDataTable _dt
come membro. Il tipo MyDataTable è stato creato nello strumento di progettazione "set di dati digitati" in Visual Studio 2005 (MyDataTable eredita da DataTable) _dt
viene popolato da un db tramite ADO.NET. Sulla base di cambiamenti da interazione con l'utente in forma, elimina una riga dalla tabella in questo modo:Accesso alle righe eliminate da un DataTable
_dt.FindBySomeKey(_someKey).Delete();
Più tardi, _dt
viene passato per valore a una forma di dialogo. Da lì, ho bisogno di eseguire la scansione attraverso tutte le righe per costruire una stringa:
foreach (myDataTableRow row in _dt)
{
sbFilter.Append("'" + row.info + "',");
}
Il problema è che al momento di fare questo dopo una cancellazione, la seguente eccezione viene generata: DeletedRowInaccessibleException: Deleted row information cannot be accessed through the row.
Il lavoro intorno a quello attualmente sto usando (che si sente come un hack) è la seguente:
foreach (myDataTableRow row in _dt)
{
if (row.RowState != DataRowState.Deleted &&
row.RowState != DataRowState.Detached)
{
sbFilter.Append("'" + row.info + "',");
}
}
la mia domanda: E 'questo il modo corretto di fare questo? Perché le righe di accesso al ciclo foreach sono state taggate tramite il metodo Delete()
??
Non è necessario controllare per 'Distaccato'. – SLaks