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

    Repeater: Controllare un valore prima del databind per assegnare il valore giusto

    ciao a tutti, buon natale
    faccio il databind di un repeater assegnandogli come datasource un oggetto datatable, fino a qui nessun problema.. il mio problema è che devo controllare il valore di un certo campo del database perchè se contiene un valore devo fare una cosa, se ne contiene un altro ne devo fare un'altra..
    Cerco di essere chiaro:
    Creo un metodo che si chiama bindrepeater, all'interno di questo metodo creo la connessione, un datareader, un datatable. Al datatable assegno delle colonne, ciclo sul datareader per ottenere i campi selezionati con la query e per ogni campo associo un datarow, associo il datarow al datatable, creo un dataview assegnandogli il datatable e associo il dataview come datasource del repeater. Lancio la pagina e il repeater funziona correttamente..
    Il problema è che quando ciclo sul datareader faccio un controllo su un certo datarow (campo del db) che se contiene un certo valore assegno ad una variabile booleana true se ne contiene un altro assegno a questa variabile false. Poi nell'itemdatabound del repeater controllo questa variabile che se contiene true fà una cosa se contiene false fà una'altra cosa.. il problema è che una volta scatenato il databind del repeater, nell'itemdatabound mi viene sempre ritornata la variabile booleana con l'ultimo valore assegnato (l'ultimo record del ciclo sul datareader) e quindi se l'ultimo valore è true ad esempio, nell'itemdatabound leggo sempre true..
    Vi faccio vedere il codice


    codice:
    private void BindSelectedProductsRepeater() 
    { 
    if(Session["user"]==null) 
    { 
    errorLabel.Visible=true; 
    errorLabel.Text="<div align=center class=descresumecart>E' necessario accedere al sito per visualizzare i prodotti</div>
    
    
    <div align=center>Torna all'home page</div>"; 
    } 
    else 
    { 
    errorLabel.Visible=false; 
    string family = Request.QueryString["sortbycat"].ToString(); 
    Hashtable prod = (Hashtable)Session["user"]; 
    string listino = prod["listino"].ToString(); 
    string sql = "SELECT codice,descrizione,marca,famiglia,"+listino+" AS prezzo,disp,data FROM Listino WHERE famiglia='"+family+"' ORDER BY data ASC"; 
    OleDbConnection cn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+Server.MapPath(@"mdb-database/database.mdb")+";User Id=admin;Password=;"); 
    cn.Open(); 
    OleDbCommand cmd = new OleDbCommand(sql,cn); 
    OleDbDataReader reader = cmd.ExecuteReader(); 
    dt = new DataTable(); 
    dt.Columns.Add(new DataColumn("codice", typeof(string))); 
    dt.Columns.Add(new DataColumn("descrizione", typeof(string))); 
    dt.Columns.Add(new DataColumn("marca", typeof(string))); 
    dt.Columns.Add(new DataColumn("disp", typeof(Int32))); 
    dt.Columns.Add(new DataColumn("prezzo", typeof(double))); 
    
    while(reader.Read()) 
    { 
    dr = dt.NewRow(); 
    dr["codice"] = reader["codice"]; 
    dr["descrizione"] = reader["descrizione"]; 
    dr["marca"] = reader["marca"]; 
    dr["disp"] = reader["disp"]; 
    dr["prezzo"] = reader["prezzo"]; 
    dt.Rows.Add(dr); 
    
    if(dr["disp"].ToString()=="0") 
    { 
    disponibile=false; 
    } 
    else 
    { 
    disponibile=true; 
    } 
    } 
    DataView dv = new DataView(dt); 
    SelProdRepeater.DataSource=dv; 
    SelProdRepeater.DataBind(); 
    cn.Close(); 
    } 
    }

    codice:
    private void SelProdRepeater_ItemDataBound(object sender, System.Web.UI.WebControls.RepeaterItemEventArgs e) 
    { 
    if ((e.Item.ItemType == ListItemType.Item) || (e.Item.ItemType == ListItemType.AlternatingItem)) 
    { 
    if(Session["user"]!=null) 
    { 
    if(disponibile==true) 
    { 
    ((HtmlImage)e.Item.FindControl("semaforo")).Src="images/semaforoverde.gif"; 
    } 
    else 
    { 
    ((HtmlImage)e.Item.FindControl("semaforo")).Src="images/semafororosso.gif"; 
    } 
    } 
    } 
    }

  2. #2
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Sinceramente :master: tutte le volte che ho dovuto costruirmi una tabella con disegno dipendente dai dati, ho optato per la costruzione della tabella via codice, colonna per colonna, riga per riga, abbandonando il repeater ed il datagrid.

    E' una palla infinita però funziona :maLOL:

    Pietro

  3. #3
    Utente di HTML.it L'avatar di dops
    Registrato dal
    Jul 2000
    Messaggi
    4,126
    Originariamente inviato da pietro09
    Sinceramente :master: tutte le volte che ho dovuto costruirmi una tabella con disegno dipendente dai dati, ho optato per la costruzione della tabella via codice, colonna per colonna, riga per riga, abbandonando il repeater ed il datagrid.

    E' una palla infinita però funziona :maLOL:

    sei un matto
    no scherzo.. è che tanto per avere un supporto sul loop dei dati ho inserito il repeater.. se non avessi voluto far niente avrei usato il datagrid..
    cmq tutto apposto ci sono riuscito

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.