string field = ViewState["Field"].ToString();
DataTable dt = (DataTable)Session["Academic"];
foreach (DataRow dr in dt.Rows)
{
if (dr["Degree"].ToString() == field)
{
dr.Delete();
dt.AcceptChanges();
}
}
Session["Academic"] = dt;
gdvwAcademic1.DataSource = Session["Academic"] as DataTable;
gdvwAcademic1.DataBind();
when this code executed raise error as "collection was modified enumeration operation might not execute." why this so..?
You cannot modify a collection in a foreach
. Try this as an alternative to apomene's answer (Pretty much does the same thing, except using the remove method of a list instead of indexes.
List<DataRow> toDelete = new List<DataRow>();
foreach(DataRow dr in dt.Rows){
if(dr["Degree"].ToString() == field){
toDelete.Add(dr);
}
}
foreach (DataRow dr in toDelete){
dt.Rows.Remove(dr);
}
This should solve your problem.
You can't modify the collection in a foreach
. So don't delete or add things in it.
You could prevent this error by creating a new collection with items you want to modify, for example with LINQ (the ToList()
is essential):
var toDelete = dt.AsEnumerable().Where(r => r["Degree"].ToString() == field).ToList();
Now you can loop this without a problem.
foreach(DataRow rowToDelete in toDelete)
rowToDelete.Delete();
dt.AcceptChanges(); // you could do that also in the loop now
you cant delete inside foreach use for loop or make a delete List:
List <int> toBeDel=new List<int>();
foreach (DataRow dr in dt.Rows)
{
if (dr["Degree"].ToString() == field)
{
toBEDel.Add(indexOf(dr));
}
}
foreach (int i in toBeDel)
{
dt.Rows[i].Delete();
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With