I have a parent WinForm that has a MyDataTable _dt as a member. The MyDataTable type was created in the “typed dataset” designer tool in Visual Studio 2005 (MyDataTable inherits from DataTable) _dt gets populated from a db via ADO.NET. Based on changes from user interaction in the form, I delete a row from the table like so:
_dt.FindBySomeKey(_someKey).Delete();
Later on, _dt is passed by value to a dialog form. From there, I need to scan through all the rows to build a string:
foreach (myDataTableRow row in _dt)
{
sbFilter.Append("'" + row.info + "',");
}
The problem is that upon doing this after a delete, the following exception is thrown:
DeletedRowInaccessibleException: Deleted row information cannot be accessed through the row.
The work around that I am currently using (which feels like a hack) is the following:
foreach (myDataTableRow row in _dt)
{
if (row.RowState != DataRowState.Deleted &&
row.RowState != DataRowState.Detached)
{
sbFilter.Append("'" + row.info + "',");
}
}
My question: Is this the proper way to do this? Why would the foreach loop access rows that have been tagged via the Delete() method??
You will have to check:
I think that the default setting won’t show deleted rows, maybe you change it somewhere.
You can always create an extra RowView and control its filter and do your loop over the View.