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"; } } } }


Rispondi quotando
però funziona :maLOL:
sei un matto 
