Ho questa funzione che viene scatenata dal click su un bottone in una gridview; la gridview elenca una lista di bandi aperti (In corso), che tramite il bottone io posso chiudere. La differenza fra un bando aperto e chiuso non è altro che il valore di un campo sul database.
protected void gvBandi_RowCommand(object sender, GridViewCommandEventArgs e)
{
string RowSelected = e.CommandArgument.ToString();
int iRowSelected = Convert.ToInt32(RowSelected);
ds = ObjBando.Ricerca("Descrizione = 'In corso'");
int id = Convert.ToInt32(ds.Tables[0].Rows[iRowSelected]["BandoID"].ToString());
if (e.CommandName == "Chiudi")
{
ObjBando.id = id;
ObjBando.Chiudi();
lblChiudiBandi.Text = "Bando Chiuso";
lblChiudiBandi.Visible = true;
}
ds = ObjBando.Ricerca("Descrizione = 'In corso'");
if (ds.Tables[0].Rows.Count == 0)
{
lblChiudiBandi.Text = "Nessun bando aperto presente";
lblChiudiBandi.Visible = true;
}
gvBandi.DataSource = ds.Tables[0];
gvBandi.DataBind();
}
Allo scatenarsi dell'evento questa funzione viene eseguita due volte; la prima volta chiude il bando giusto, la seconda volta quello successivo (perchè iRowSelect rimane lo stesso, ma il dataset ds creato filtrando i bandi non contiene più il bando chiuso precedentemente). Chiaramente vorrei che ne chiudesso solo uno, il primo.
Ho provato a commentare le ultime due righe:
//gvBandi.DataSource = ds.Tables[0];
//gvBandi.DataBind();
Adesso mi esegue una sola volta la funzione, ma non aggiorna la gridview allo stato attuale....