Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2003
    Messaggi
    109

    [c#] Probl POST_BACK e altri

    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?
    codice:
    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();
    			}
    			
    		}
    	}
    }
    Le vie del signore sono infinite.....è la segnaletica che lascia a desiderare

  2. #2
    Sarebbe meglio utilizzare dei controlli aspx come ad esempio repeater o datagrid. In questo modo non dovresti fare cicli (stile classic asp) sulle righe contenute in una datatable e costruire una tabella per ottenere il relativo output sulla pagina ma ti basterebbe fare qualcosa di simile a
    codice:
    tuo_repeater_o_datagrid.datasource = ds.tables("nometabella") 
    tuo_repeater_o_datagrid.databind
    questi controlli mantengono di default il viewstate cioe' il loro stato quindi vanno popolati al primo caricamento della pagina.
    Saluti a tutti
    Riccardo

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2003
    Messaggi
    109
    Siccome sono proprio un principiante e molto autodidatta, sapresti indicarmi dei link dove spiegano abbastanza chiaramente il funzionamento di questo repeater o datagrid? sinceram non saprei dove mettere le mani senno
    Grazie mille
    Le vie del signore sono infinite.....è la segnaletica che lascia a desiderare

  4. #4
    Originariamente inviato da Pingus
    sapresti indicarmi dei link dove spiegano abbastanza chiaramente il funzionamento di questo repeater o datagrid?
    se usi visual studio basta guardare nella documentazione altrimenti su http://msdn.microsoft.com cerchi datagrid.
    Se usi visual studio, trascina sulla pagina dalla toolbox un oggetto datagrid.
    Nel codebehind nel page load dopo aver controllato che non sia un postback scrivi
    codice:
    datagrid1.datasource = ds.tables("nometabella") 
    datagrid1.databind
    dove datagrid1 e' il nome dell'oggetto che hai trascinato/creato sulla pagina aspx e ds.tables("nometabella") e' un dataset con dentro una tabella popolata dei record che vuoi.
    Saluti a tutti
    Riccardo

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2003
    Messaggi
    109
    Ciao, ho provato a usatre il dataGrid come mi hai suggerito....
    avrei una domanda..nelle righe dalla tabella, dovra comparire un
    check box, pero puo darsi che un check box sia da associare a 2 righe (praticamente avrebbe colspan=2)..come faccio?
    Ho fatto questo codice, ma ho un bottone(per ora come esempio poi
    mettero un check box) per ogni riga:

    PAGINA PROVA.ASPX
    codice:
    <%@ Page CodeBehind="AnnullaRichiesta.aspx.cs" Language="c#" AutoEventWireup="false" Inherits="Stefano.AnnullaRichiesta" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
    	<HEAD	</HEAD>
    	<body bgcolor="white">
    		<form runat="server" ID="Form1">
    			<asp: Datagrid ID="MyDataGrid" AutogenerateColumns="false" CellPadding="2" BorderWidth="1" BorderColor="White" GridLines="vertical" OnItemCommnd="OnItemCommand" RunAt="server">
    				<Columns>
    					<asp:BoundColumn HeaderText="Item ID" DataField="idRichiesta" />
    					<asp:ButtonColumn HeaderText="ACTION" Text="ADD TO" CommandName="AddToCart" />
    				</Columns>
    			
    			</asp: DataGrid>
    			<asp:Label ID="Output" RunAt="server" />
    		</form>
    		
    	</body>
    </HTML>
    PAGINA PROVA.ASPX.CS
    codice:
    namespace Stefano
    {
    		public class AnnullaRichiesta : System.Web.UI.Page
    	{
    		
    		protected string strConn = "DRIVER={MySQL ODBC 3.51 Driver};SERVER=utp5n2-925;DATABASE=gestioneferie;UID=userferie;PWD=userferie;"; 
    		protected string Query;
    		protected System.Web.UI.WebControls.DataGrid MyDataGrid;
    		protected System.Data.DataSet Ds;
    
    		protected Microsoft.Data.Odbc.OdbcConnection Conn;
    		protected Microsoft.Data.Odbc.OdbcCommand command;
    	
    		private void Page_Load(object sender, System.EventArgs e)
    		{						
    			if (!IsPostBack)
    			{
    				 Conn = new Microsoft.Data.Odbc.OdbcConnection(strConn);
    				try 
    				{
    					Conn.Open();
    					Query = "select d.IdRichiesta ";
    					Query = Query+"from gestioneferie.dettaglioRichiesta d";
    					command = new Microsoft.Data.Odbc.OdbcCommand(Query,Conn);
    					reader = command.ExecuteReader();
    					MyDataGrid.DataSource = reader;
    					MyDataGrid.DataBind();
    				}
    				finally{Conn.Close();}
    
    			}	
    		}
    				
    			
    			// 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.Load += new System.EventHandler(this.Page_Load);
    
    		}
    		#endregion
    
    		
    	}
    }
    Le vie del signore sono infinite.....è la segnaletica che lascia a desiderare

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2003
    Messaggi
    109
    uppp
    Le vie del signore sono infinite.....è la segnaletica che lascia a desiderare

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.