Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1
    Utente di HTML.it L'avatar di dops
    Registrato dal
    Jul 2000
    Messaggi
    4,126

    si può lavorare con i repeater annidati?

    ciao, stavo pensando di annidare un repeater all'interno di un altro repeater.. è possibile farlo?
    Voglio l'alt+s anche per FF

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2002
    Messaggi
    4,127
    si, ma il datasource del repeater incapsulato deve essere una funzione ..
    nel senso
    <repeater 1>
    contenuto
    --<repeater 2 DataSource="MiaFunzione">
    --contenuto
    --</repeater 2>
    </repeater 1>



  3. #3
    Utente di HTML.it L'avatar di dops
    Registrato dal
    Jul 2000
    Messaggi
    4,126
    ciao allora ecco il mio problema:
    Nella pagina aspx ho un repeater che semplicemente mi ripete dei dati provenienti dal database (delle news), all'interno di questo repeater ho inserito anche un linkbutton che mi fà il postback della pagina, nasconde il repeater della visualizzazione news e mi visualizza un altro repeater dove visualizzo l'intero testo della news (il dettaglio della news selezionata)... è proprio in questo ultimo repeater che ho bisogno di incorporare un altro repeater per visualizzare delle immagini provenienti da una tabella diversa..
    Ti faccio vedere il codice :

    Questo è il codice del Page_Load dove popolo all'apertura della pagina il repeater che mi visualizza l'elenco delle news
    codice:
    	private void Page_Load(object sender, System.EventArgs e)
    		{
    			if(!IsPostBack)
    			{
    				string strconn = ConfigurationSettings.AppSettings["Provider"]+Server.MapPath("~/mdb-database/")+ConfigurationSettings.AppSettings["DatabaseName"];	
    				
    				string sql = "SELECT Top 5 Left(testo,100)+'..' as strtesto,id,titolo,img,data_ins FROM news_lavori ORDER by data_ins ASC";
    				try
    				{
    				OleDbConnection conn= new OleDbConnection(strconn);
    				OleDbCommand cmd=new OleDbCommand(sql,conn);	
    				conn.Open();
    				OleDbDataReader reader=cmd.ExecuteReader();
    				Work_repeater.DataSource=reader;
    				Work_repeater.DataBind();
    				conn.Close();
    				}
    				catch (Exception err)
    				{
    				
    				Response.Write(err.ToString());
    					
    				}
    				
    				
    
    				detail_repeater.Visible=false;	
    			}
    				else
    			{
    			//visualizzo e nascondo i rispettivi repeater
    			detail_repeater.Visible=true;
    			Work_repeater.Visible=false;	
    			
    			}
    		}
    Questo è il repeater che viene popolato al Page_Load:
    codice:
    <asp:repeater id="Work_repeater" runat="server">
    								<ItemTemplate>
    									<TABLE id="table_into_repeater" cellSpacing="2" cellPadding="0" width="100%" border="0">
    										<TR>
    											<TD colSpan="3"><span class="titolo_news"><%#DataBinder.Eval(Container.DataItem,"Titolo")%></span>
    
    												<span class="data_news">Data di pubblicazione:
    													<%#DataBinder.Eval(Container.DataItem,"data_ins","{0:d}")%>
    												</span>
    											</TD>
    										</TR>
    										<TR>
    											<TD colSpan="3">[img]<%#DataBinder.Eval(Container.DataItem,"img")%>[/img]<span class="testo_news">
    													<%#DataBinder.Eval(Container.DataItem,"strtesto")%>
    												</span>
    											</TD>
    										</TR>
    										<TR>
    											<TD colSpan="3" align="right" height="1">
    												<asp:LinkButton id="details_link" runat="server" CssClass="leggi_tutto" CommandName='<%#DataBinder.Eval(Container.DataItem,"id")%>'>Leggi tutto »</asp:LinkButton>
    											</TD>
    										</TR>
    										<TR>
    											<TD colSpan="3" align="left" height="1"><hr width="400" noshade size="1">
    											</TD>
    										</TR>
    									</TABLE>
    								</ItemTemplate>
    							</asp:repeater>
    Adesso devo popolare il repeater che mi visualizza il dettaglio della news selezionata quando clicco sul linkbutton corrispondente.. quindi all'evento Item_Command del repeater principale ho scritto:
    codice:
    private void Work_repeater_ItemCommand(object source, System.Web.UI.WebControls.RepeaterCommandEventArgs e)
    		{
    		
    		string id= e.CommandName;
    		//Response.Write (id);
    		string strconn = ConfigurationSettings.AppSettings["Provider"]+Server.MapPath("~/mdb-database/")+ConfigurationSettings.AppSettings["DatabaseName"];
    		string sql_sel_lavoro = "SELECT * FROM news_lavori WHERE id="+id;
    		OleDbDataAdapter adapter_sel_lavoro= new OleDbDataAdapter(sql_sel_lavoro,strconn);
    		DataSet ds_sel_lavoro = new DataSet(); 
    		adapter_sel_lavoro.Fill(ds_sel_lavoro);
    		detail_repeater.DataSource=ds_sel_lavoro.Tables[0].DefaultView;
    		detail_repeater.DataBind();
    		}
    E questo è il repeater che visualizzo:
    codice:
    <asp:repeater id="detail_repeater" runat="server">
    								<ItemTemplate>
    									<TABLE WIDTH="100%" BORDER="0" CELLSPACING="1" CELLPADDING="1">
    										<TR>
    											<TD ALIGN="left">Home <span class="testo_news">
    													> Dettaglio lavoro: </span><span class="titolo_in_dettaglio">
    													<%#DataBinder.Eval(Container.DataItem,"Titolo")%>
    												</span>
    											</TD>
    										</TR>
    									</TABLE>
    									
    
    									<table width="100%" border="0" cellspacing="0" cellpadding="3">
    										<tr>
    											<td width="15%" valign="top">[img]<%#DataBinder.Eval(Container.DataItem,"img")%>[/img]</td>
    											<td width="85%" rowspan="2" valign="top"><span class="testo_news"><%#DataBinder.Eval(Container.DataItem,"testo")%></span></td>
    										</tr>
    										<tr>
    											<td valign="top"><span class="altre_immagini">Altre immagini di questo lavoro:</span>
     
    												<asp:Repeater ID="repeater_miniature" Runat="server">
    													<ItemTemplate>
    														ciccio
    													</ItemTemplate>
    												</asp:Repeater>
    												
    											</td>
    										</tr>
    									</table>
    								</ItemTemplate>
    							</asp:repeater>
    Come vedi ho inserito anche un altro repeater all'interno di ques'ultimo (è commentato e dentro c'è scritto "ciccio") ed è proprio all'interno di questo repeater annidato che devo visualizzare delle immagini provenienti da una tabella diversa da quella delle news ma che è collegata a quella delle news tramite id (si tratta in pratica di immagini supplementari per quella news)
    Spero di essere stato chiaro.. mi puoi aiutare per favore?
    Voglio l'alt+s anche per FF

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2002
    Messaggi
    4,127
    <asp:Repeater ID="repeater_miniature" Runat="server"
    DataSource="MiniatureByID('<%#DataBinder.Eval(Cont ainer.DataItem,"ID")%>') >

    (non ti preoccupare: il DataBinder.Eval(..) si riferisce al repeater padre (o madre? ))

    la funzione MiniatureByID potrebbe essere
    codice:
    Function MiniatureByID(myID as String)
    'prendo i dati mettondo nella query sql la "variabile" myID..
    'ora al posto di fare repeater_miniature.DataSource = reader, 
    'visto ke tanto ci saranno + repeater_miniature (e cmq anke se ce n'è uno solo nn si kiama cosi!) faccio:
    'Return reader
    'dove reader è il dataReader ke ti legge tutto (preso dal tuo primo codice)
    'praticamente il codice potrebbe essere:
    
    string strconn1 = "stringa connessione"
    string sql1 = "SELECT boh where id=" & myID;
    try
    {
    OleDbConnection conn1= new OleDbConnection(strconn);
    OleDbCommand cmd1=new OleDbCommand(sql1,conn1);	
    conn1.Open();
    OleDbDataReader reader1=cmd1.ExecuteReader();
    return reader1;
    conn1.Close();
    }
    catch (Exception err1)
    {
    NomeLabelCreataAppostaPerErrori.Text = err1.ToString());
    }
    End Function
    cmq quel codice li andrebbe molto ottimizzato, cioè io x fretta ho copiato incollato il tuo codice aggiungendo un 1 di fianco alle variabili.. ovvio ke tu puoi utilizzarne 1 sola x tutte le operazioni ke vuoi fare sulla pagina..

  5. #5
    Utente di HTML.it L'avatar di dops
    Registrato dal
    Jul 2000
    Messaggi
    4,126
    aspè non mi hai fatto capire niente
    questo repeater e questa funzione sostituiscono un repeater e un metodo (funzione) che ho già scritto io?
    Voglio l'alt+s anche per FF

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2002
    Messaggi
    4,127
    il repeater sostituisce il repeater omonimo, la funzione invece nn sostituisce niente xkè prima nn esisteva

  7. #7
    Utente di HTML.it L'avatar di dops
    Registrato dal
    Jul 2000
    Messaggi
    4,126
    Originariamente inviato da sms
    il repeater sostituisce il repeater omonimo, la funzione invece nn sostituisce niente xkè prima nn esisteva
    ah si scusa.. vabbè provo e ti faccio un fischio in negativo o positivo..
    ah ma tu scrivi return reader1
    e poi myID dove lo valorizzo? cioè da dove lo prendo?
    Voglio l'alt+s anche per FF

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2002
    Messaggi
    4,127
    >> ah ma tu scrivi return reader1
    praticamente gli stai dicento ke il Datasource è reader1

    >> e poi myID dove lo valorizzo? cioè da dove lo prendo?
    myID lo valorizzi nella riga <asp:Repeater> e prendi il valore dal repeater padre/madre

  9. #9
    Utente di HTML.it L'avatar di dops
    Registrato dal
    Jul 2000
    Messaggi
    4,126
    Originariamente inviato da sms
    >> ah ma tu scrivi return reader1
    praticamente gli stai dicento ke il Datasource è reader1

    >> e poi myID dove lo valorizzo? cioè da dove lo prendo?
    myID lo valorizzi nella riga <asp:Repeater> e prendi il valore dal repeater padre/madre
    ah ecco prendo l'id del repeater padre..mmhh.. stò scrivendo il codice.. ti faccio sapere..
    Voglio l'alt+s anche per FF

  10. #10
    Utente di HTML.it L'avatar di dops
    Registrato dal
    Jul 2000
    Messaggi
    4,126
    mi segnala un errore che dice: not all code path return e value e mi segna come riga d'errore la creazione del metodo cioè questa:
    codice:
    public string MiniatureByID(string myID)
    codice:
    public string MiniatureByID(string myID)
    		{
    			//prendo i dati mettondo nella query sql la "variabile" myID..
    			//ora al posto di fare repeater_miniature.DataSource = reader, 
    			//visto ke tanto ci saranno + repeater_miniature (e cmq anke se ce n'è uno solo nn si kiama cosi!) faccio:
    			//Return reader
    			//dove reader è il dataReader ke ti legge tutto (preso dal tuo primo codice)
    			//praticamente il codice potrebbe essere:
    
    			string strconn = ConfigurationSettings.AppSettings["Provider"]+Server.MapPath("~/mdb-database/")+ConfigurationSettings.AppSettings["DatabaseName"];
    			string sql1 = "SELECT * from  img_work_gallery where work_id=" + myID;
    			try
    			{
    				OleDbConnection conn1 = new OleDbConnection(strconn);
    				OleDbCommand cmd1=new OleDbCommand(sql1,conn1);	
    		
    				conn1.Open();
    				OleDbDataReader reader1=cmd1.ExecuteReader();
    				return reader1.ToString();
    				conn1.Close();
    			}
    			catch(Exception err1)
    			{
    			err1.ToString();
    			}
    		}
    Voglio l'alt+s anche per FF

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.