Pingus
18-11-2004, 15:21
Ciao a tutti, ho un domanda un po difficile eda spiegare (anche perche uso da pochissimo .NET)
e quindi mi scuserete se quello che scrivo non è molto chiaro (aggiungo anche il codice ne l caso potesse essere d'aituo).....
Abbiamo una pagina aspx.cs (VEDI CODICE SOTTOSTANTE) che al caricamento estrae i dati
da db e li inserisce in una tabella (fatta con tag asp) e visualizza i risultati a video.
Alla tabella viene aggiunto anche un CheckBox per ogni riga; questi checkbox fanno parte di un array
di CheckBox dichiarato come attributo della classe associata.
In questa pagina c'è un pulsante ELIMINA che serve a cancellare le righe selezionate con il checkbox.
Avrei 2 domande da fare :
1) Quando faccio un postBack la tabella TabellaRichieste perde tutti i suoi valori
(infatti son ocostretto ad eseguire la query di popolamente ad ogni postBack)..è un
comportamento corretto oppure la tabella essendo creata nella pagina aspx tramite tag asp
dovrebbe mantenere i valori?
2) A causa della 1) ad ogni caricamento della pagina noi chiamiamo il metodo di popolamento
che fa anche la new() del CheckBoxArray.... dopo l'esecuzione di questo metodo si passa
ad eseguire il metodo elimina, mi aspetterei che il checkboxArray non avesse piu i suoi elementi
checkati come prima della pressione di ELIMINA...invece entrando nel metodo ritrovo i check come
precedentemente impostati some se la new non avesse avuto effetto...
sapreste dire dove sbaglio, dov'è l'errore?
namespace CarloProjectCD
{
public class AnnullaRichiesta : System.Web.UI.Page
{
. . . . . . . .
protected string Query;
protected System.Web.UI.WebControls.Table TabellaRichieste;
protected System.Web.UI.WebControls.CheckBox[] CheckBoxArray;
protected System.Data.DataSet Ds;
. . . . . . . .
int ContArrayCheck = 0;
private void EseguiQuery ()
{
int controllo=0;
try
{
ContArrayCheck=0;
Ds = new DataSet();
---- Qui C'e' la QUERY SELEZIONE DA DB ----
DataAdapter = new OdbcDataAdapter(Query, strConn);
DataAdapter.Fill(Ds);
if (Ds.Tables[0].Rows.Count==0)
{
Elimina.Enabled=false;
}
else
{
if (CheckBoxArray==null)
{
controllo=1;
CheckBoxArray = new CheckBox[Ds.Tables[0].Rows.Count];
}
foreach (DataRow row in Ds.Tables[0].Rows)
{
if (row.ItemArray[0]!=System.DBNull.Value)
{
-- QUI C'è LA COSTRUZIONE DELLA TABELLA TabellaRichieste --
if (controllo==1)
{
CheckBoxArray[ContArrayCheck] = new CheckBox();
}
else
{
CheckBoxArray[ContArrayCheck].Checked=false;
}
Colonna.Controls.Add(CheckBoxArray[ContArrayCheck]);
ContArrayCheck=ContArrayCheck+1;
}
}
}
}
catch (OdbcException)
{
Label1.Text = "OdbcException";
}
finally
{
DataAdapter.Dispose();
}
}
private void Page_Load(object sender, System.EventArgs e)
{
LabelIntestazione.Text="ANNULLO RICHIESTE";
EseguiQuery();
}
// Put user code to initialize the page here
#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
InitializeComponent();
base.OnInit(e);
}
private void InitializeComponent()
{
this.Chiudi.Attributes.Add("onClick", "javascript:parent.window.close();");
this.Elimina.Click += new System.EventHandler(this.Elimina_Click);
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
private void Elimina_Click(object sender, System.EventArgs e)
{
try
{
int Contatore=0;
foreach (TableRow row1 in TabellaRichieste.Rows)
{
if (row1.Cells.Count==8)
{
if (CheckBoxArray[Contatore].Checked)
{
--QUI C'è LA QUERY DI DELETE---
}
Contatore=Contatore+1;
}
}
TabellaRichieste.Rows.Clear();
EseguiQuery();
}
catch (OdbcException)
{
Label1.Text = "OdbcException";
}
finally
{
Conn.Close();
}
}
}
}
e quindi mi scuserete se quello che scrivo non è molto chiaro (aggiungo anche il codice ne l caso potesse essere d'aituo).....
Abbiamo una pagina aspx.cs (VEDI CODICE SOTTOSTANTE) che al caricamento estrae i dati
da db e li inserisce in una tabella (fatta con tag asp) e visualizza i risultati a video.
Alla tabella viene aggiunto anche un CheckBox per ogni riga; questi checkbox fanno parte di un array
di CheckBox dichiarato come attributo della classe associata.
In questa pagina c'è un pulsante ELIMINA che serve a cancellare le righe selezionate con il checkbox.
Avrei 2 domande da fare :
1) Quando faccio un postBack la tabella TabellaRichieste perde tutti i suoi valori
(infatti son ocostretto ad eseguire la query di popolamente ad ogni postBack)..è un
comportamento corretto oppure la tabella essendo creata nella pagina aspx tramite tag asp
dovrebbe mantenere i valori?
2) A causa della 1) ad ogni caricamento della pagina noi chiamiamo il metodo di popolamento
che fa anche la new() del CheckBoxArray.... dopo l'esecuzione di questo metodo si passa
ad eseguire il metodo elimina, mi aspetterei che il checkboxArray non avesse piu i suoi elementi
checkati come prima della pressione di ELIMINA...invece entrando nel metodo ritrovo i check come
precedentemente impostati some se la new non avesse avuto effetto...
sapreste dire dove sbaglio, dov'è l'errore?
namespace CarloProjectCD
{
public class AnnullaRichiesta : System.Web.UI.Page
{
. . . . . . . .
protected string Query;
protected System.Web.UI.WebControls.Table TabellaRichieste;
protected System.Web.UI.WebControls.CheckBox[] CheckBoxArray;
protected System.Data.DataSet Ds;
. . . . . . . .
int ContArrayCheck = 0;
private void EseguiQuery ()
{
int controllo=0;
try
{
ContArrayCheck=0;
Ds = new DataSet();
---- Qui C'e' la QUERY SELEZIONE DA DB ----
DataAdapter = new OdbcDataAdapter(Query, strConn);
DataAdapter.Fill(Ds);
if (Ds.Tables[0].Rows.Count==0)
{
Elimina.Enabled=false;
}
else
{
if (CheckBoxArray==null)
{
controllo=1;
CheckBoxArray = new CheckBox[Ds.Tables[0].Rows.Count];
}
foreach (DataRow row in Ds.Tables[0].Rows)
{
if (row.ItemArray[0]!=System.DBNull.Value)
{
-- QUI C'è LA COSTRUZIONE DELLA TABELLA TabellaRichieste --
if (controllo==1)
{
CheckBoxArray[ContArrayCheck] = new CheckBox();
}
else
{
CheckBoxArray[ContArrayCheck].Checked=false;
}
Colonna.Controls.Add(CheckBoxArray[ContArrayCheck]);
ContArrayCheck=ContArrayCheck+1;
}
}
}
}
catch (OdbcException)
{
Label1.Text = "OdbcException";
}
finally
{
DataAdapter.Dispose();
}
}
private void Page_Load(object sender, System.EventArgs e)
{
LabelIntestazione.Text="ANNULLO RICHIESTE";
EseguiQuery();
}
// Put user code to initialize the page here
#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
InitializeComponent();
base.OnInit(e);
}
private void InitializeComponent()
{
this.Chiudi.Attributes.Add("onClick", "javascript:parent.window.close();");
this.Elimina.Click += new System.EventHandler(this.Elimina_Click);
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
private void Elimina_Click(object sender, System.EventArgs e)
{
try
{
int Contatore=0;
foreach (TableRow row1 in TabellaRichieste.Rows)
{
if (row1.Cells.Count==8)
{
if (CheckBoxArray[Contatore].Checked)
{
--QUI C'è LA QUERY DI DELETE---
}
Contatore=Contatore+1;
}
}
TabellaRichieste.Rows.Clear();
EseguiQuery();
}
catch (OdbcException)
{
Label1.Text = "OdbcException";
}
finally
{
Conn.Close();
}
}
}
}