Jag försöker göra en web service och det lyckas inte. Jag får felmeddelandet <b>System.InvalidOperationException: Collection was modified; enumeration operation may not execute.</b> Du förändrar en enumerable collection (advertise) medans du loopar i den, detta är inte tillåtet. Det funkade bra. Men hur kan jag få ut det på sidan? Så här blev inget bra, har aldrig bundit en lista innan.fel på lista
web servicen ser ut så här:
<code>
[WebMethod]
public List<Advertise> GetAllAdvertise()
{
AdvertiseDB adDB = new AdvertiseDB();
List<Advertise> advertise = adDB.GetPublicAds();
foreach (Advertise adver in advertise) // Det är på denna rad jag får felet....
{
advertise.Add(adver);
}
return advertise;
}
</code>
mitt databasanrop så här:
<code>
public List<Advertise> GetPublicAds()
{
SqlConnection conn = new SqlConnection(connectionString);
SqlCommand cmd = new SqlCommand("getAllPublicAds", conn);
cmd.CommandType = CommandType.StoredProcedure;
List<Advertise> ad = new List<Advertise>();
try
{
conn.Open();
SqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
Advertise advertise = new Advertise((int)reader["advertiseID"], (string)reader["header"], (string)reader["text"]);
ad.Add(advertise);
}
reader.Close();
return ad;
}
catch (Exception ex)
{
throw new ApplicationException(ex.Message.ToString());
}
finally
{
conn.Close();
}
}
</code>
Och sidan jag försöker använda den på:
<code>
getPublicAds getAds = new getPublicAds();
List<Advertise> ad = getAds.GetAllAdvertise();
GridView1.DataSource = ad[0].ToString();
GridView1.DataBind();
</code>Sv: fel på lista
Även om det vore tillåtet skulle detta bli en forever loop. (för varje, lägg till en, osv osv osv).
Men varför gör du så? Du vill returnera listan som skapades i datalagret?
Skippa foreach och returnera helt enkelt advertise.Sv:fel på lista
<code>
getPublicAds getAds = new getPublicAds();
List<Advertise> ad = getAds.GetAllAdvertise();
GridView1.DataSource = ad[0].Text.ToString();
GridView1.DataBind();
</code>
-------------------------EDIT---------------------
Så här blev det bra
GridView1.DataSource = getAds.GetAllAdvertise();