ciao, una domanda: con:
non dovrei recuperare il contenuto di un campo? perchè mi stampa il nome del campo?codice:string imguri=ds.Tables["img_work_gallery"].Columns["urlimg"].ToString(); Response.Write(imguri);
ciao, una domanda: con:
non dovrei recuperare il contenuto di un campo? perchè mi stampa il nome del campo?codice:string imguri=ds.Tables["img_work_gallery"].Columns["urlimg"].ToString(); Response.Write(imguri);
Voglio l'alt+s anche per FF
prova con
Non puoi recuperare il campo dandogli solo la colonna, ha bisogno anche di un riferimento per la rigacodice:string imguri=ds.Tables["img_work_gallery"].Rows().Item("urlimg"].);
PAZZIA PAZZIA
PORTAMI VIA!
infatti me ne sono reso conto solo adesso.. ho fatto:
però mi recupera solo il primo record.. come facio a recuperare tutti i record? con un ciclo? si ma come?codice:string imguri=ds.Tables["img_work_gallery"].Rows[2]["urlimg"].ToString();sono in una relazione.. ti faccio vedere..
mi servono gli url delle immagini (il campo "urlimg" appunto) per fare un resize delle immagini prima di fare il binding di page..codice:private void Work_repeater_ItemCommand(object source, System.Web.UI.WebControls.RepeaterCommandEventArgs e) { string id= e.CommandName; string strconn = ConfigurationSettings.AppSettings["Provider"]+Server.MapPath("~/mdb-database/")+ConfigurationSettings.AppSettings["DatabaseName"]; string sql_sel_lavoro = "SELECT * FROM news_lavori WHERE id="+id; string sql_sel_allimg = "SELECT * FROM img_work_gallery where work_id="+id; OleDbConnection conn=new OleDbConnection(strconn); OleDbDataAdapter adapter_sel_lavoro= new OleDbDataAdapter(sql_sel_lavoro,conn); DataSet ds = new DataSet(); adapter_sel_lavoro.Fill(ds,"news_lavori"); OleDbDataAdapter adapter_sel_img = new OleDbDataAdapter(sql_sel_allimg,conn); adapter_sel_img.Fill(ds,"img_work_gallery"); //relazione ds.Relations.Add("myrelation",ds.Tables["news_lavori"].Columns["id"],ds.Tables["img_work_gallery"].Columns["work_id"]); string imguri=ds.Tables["img_work_gallery"].Rows[2]["urlimg"].ToString(); Response.Write(imguri); detail_repeater.DataSource = ds.Tables["news_lavori"]; Page.DataBind(); conn.Close(); }
come posso fare?
Voglio l'alt+s anche per FF
Originariamente inviato da dops però mi recupera solo il primo record.. come facio a recuperare tutti i record? con un ciclo? si ma come?cmq... il codice non mi sembra ben fatto. A prima vista sembra che il campo urlimg possa stare nella tabella news_lavori senza bisogno di creare una tabella aggiuntiva. La relazione non vedo a cosa possa servire visto che sia news_lavori che img_work_gallery sono state filtrate con lo stesso id (e quindi non ci sono altri record appartenenti a id diversi).codice:foreach (DataRow dr in ds.Tables["img_work_gallery"].Rows) { // codice per modificare il contenuto dei campi }
Metodologicamente parlando, non mi sembra una buona idea collegarsi dall'interno del metodo al db effettuare le elaborazioni chiamare il databind dell'intera pagina (con il rischio di rifare nuovi inutili collegamenti alla base dati). Piuttosto riempi la tabella una volta per tutte, se non e' troppo grossa rendila persistente (cache o session) e all'interno del metodo indicato usa una dataview e in particolare la rowfilter per visualizzare solo il o i record che ti interessano.
Saluti a tutti
Riccardo
Ciao, grazie per aver risposto..Originariamente inviato da riccardone
cmq... il codice non mi sembra ben fatto. A prima vista sembra che il campo urlimg possa stare nella tabella news_lavori senza bisogno di creare una tabella aggiuntiva. La relazione non vedo a cosa possa servire visto che sia news_lavori che img_work_gallery sono state filtrate con lo stesso id (e quindi non ci sono altri record appartenenti a id diversi).codice:foreach (DataRow dr in ds.Tables["img_work_gallery"].Rows) { // codice per modificare il contenuto dei campi }
Metodologicamente parlando, non mi sembra una buona idea collegarsi dall'interno del metodo al db effettuare le elaborazioni chiamare il databind dell'intera pagina (con il rischio di rifare nuovi inutili collegamenti alla base dati). Piuttosto riempi la tabella una volta per tutte, se non e' troppo grossa rendila persistente (cache o session) e all'interno del metodo indicato usa una dataview e in particolare la rowfilter per visualizzare solo il o i record che ti interessano.
si sono daccordo ma permettimi di illustrarti il quadro della situazione..
sulla pagina aspx ho un repeater che semplicemente viene popolato con dei dati provenienti dal database (delle news) e questo popolamento lo faccio all'interno dell'evento page_load:
In questo repeater è presente un linkbutton con il quale faccio il postback e nel quale memorizzo l'id di ogni record estratto.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; } }
Al click sul linkbutton visualizzo un altro repeater (il dettaglio della news selezionata) che contiene una descrizione completa della news selezionata.. Visualizzo il repeater dei dettagli e faccio il databinding di questo repeater nell'evento ItemCommand del repeater che visualizza l'elenco delle news (il primo):
Il perchè della relazione stà nel fatto che nel repeater dove visualizzo il dettaglio della news è presente anche un altro repeater che mi visualizza delle immagini provenienti da un altra tabella relazionata alla tabella delle news tramite l'id univoco della tabella delle news e un campo "work_id"codice:private void Work_repeater_ItemCommand(object source, System.Web.UI.WebControls.RepeaterCommandEventArgs e) { string id= e.CommandName; string strconn = ConfigurationSettings.AppSettings["Provider"]+Server.MapPath("~/mdb-database/")+ConfigurationSettings.AppSettings["DatabaseName"]; string sql_sel_lavoro = "SELECT * FROM news_lavori WHERE id="+id; string sql_sel_allimg = "SELECT * FROM img_work_gallery where work_id="+id; OleDbConnection conn=new OleDbConnection(strconn); OleDbDataAdapter adapter_sel_lavoro= new OleDbDataAdapter(sql_sel_lavoro,conn); DataSet ds = new DataSet(); adapter_sel_lavoro.Fill(ds,"news_lavori"); OleDbDataAdapter adapter_sel_img = new OleDbDataAdapter(sql_sel_allimg,conn); adapter_sel_img.Fill(ds,"img_work_gallery"); ds.Relations.Add("myrelation",ds.Tables["news_lavori"].Columns["id"],ds.Tables["img_work_gallery"].Columns["work_id"]); detail_repeater.DataSource = ds.Tables["news_lavori"]; Page.DataBind(); conn.Close(); }
adesso stavo cercando di implementare una metodo per fare il resizing di queste immagini prima di fare il databindinding del controllo Page..
Comunque io sarò felicissimo di ottimizzare (ma anche stravolgere) il mio codice con delle indicazioni che lo possano rendere + efficiente e corretto..
cosa mi consigli di fare?
ah.. dimenticavo.. la tabella creata a parte per le immagini mi server per rendere il database + leggibile... cioè se creassi un campo per le immagini (l'attuale "urlimg") nella tabella news_lavori, visto che le immagini saranno + di 5 per news, dovrei dividere i vari percorsi (perchè nel campo "urlimg" ci vanno dei percorsi che portano alle immagini) con un segno che poi dovrei splittare nel codice..
Grazie![]()
Voglio l'alt+s anche per FF
Te l'ho gia' consigliato nel precedente post.Originariamente inviato da dops
cosa mi consigli di fare?
Cmq, aggiungo che non vedo a cosa serva riempire nuovamente la tabella news_lavori insieme alla tabella delle immagini per poi aggiungere una datarelation (quest'ultima non serve a nulla da quanto vedo nel codice). Riempi solo la tabella delle immagini filtrata con l'id che vuoi tu. E ti consiglio anche di utilizzare i parametri nelle query e non delle variabili appiccicate con un +. Questo per una questione di sicurezza.
Saluti a tutti
Riccardo
scusa ma non riesco a capire.. la tabella news lavori è la stessa che mi serve per recuperare la news integrale (il dettaglio).. in pratica recupero gli stessi campi di quando visualizzo le news al caricamento della pagina.. solo che questa volta non limito il testo da visualizzare.. (nella prima select faccio un left), in più devo recuperare anche il campo imgurl della tabella che contiene le immagini e relazionarla.. non riesco a capire cos'è che non và..Originariamente inviato da riccardone
Te l'ho gia' consigliato nel precedente post.
Cmq, aggiungo che non vedo a cosa serva riempire nuovamente la tabella news_lavori insieme alla tabella delle immagini per poi aggiungere una datarelation (quest'ultima non serve a nulla da quanto vedo nel codice). Riempi solo la tabella delle immagini filtrata con l'id che vuoi tu. E ti consiglio anche di utilizzare i parametri nelle query e non delle variabili appiccicate con un +. Questo per una questione di sicurezza.
per i parametri ok
Dai dammi una mano..
Voglio l'alt+s anche per FF
ok... quindi ti serve il record della tabella news con i dettagli. Pero' c'e' da dire che il record con tutti i campi lo avevi gia' chiesto al db. Quindi potresti trovare un modo per chiedere al db tutti i record che ti servono della tabella delle news e metterli in saccoccia una volta per tutte es nel pageload if !postback nel dataset che puoi rendere persistente nella cache o session sempre che questa tabella non sia troppo grossa. Nel secondo repeater che dovrebbe rappresentare i dettagli, per quanto riguarda i dettagli della news, li recuperi senza chiederli di nuovo al db applicando una dataview.rowfilter = "id=quellochevuoi" sulla datatable del dataset in memoria. Mentre se vuoi chiedere al db le path delle immagini riempi un datareader con solo le img mettendo nel where della query l'id della news (ma potresti riempire anche una datatable se ti trovi piu' comodo).Originariamente inviato da dops
...la tabella news lavori è la stessa che mi serve per recuperare la news integrale (il dettaglio).. in pratica recupero gli stessi campi di quando visualizzo le news al caricamento della pagina.. solo che questa volta non limito il testo da visualizzare.. (nella prima select faccio un left), in più devo recuperare anche il campo imgurl della tabella che contiene le immagini e relazionarla.. non riesco a capire cos'è che non và..
per i parametri ok
Dai dammi una mano..
Saluti a tutti
Riccardo
riccardone io per adesso visualizzo tutto abbastanza bene.. quindi mi funziona tutto, magari ad ottimizzare ci penso dopo aver fatto quest'ultima cosa.. che è recuperare i percorsi elle immagini e fare il resize di queste.. per adesso lo faccio nel codice che ho, poi dopo ti giuro che ottimizzo tutto..
quindi volevo una mano su come recuperare i percorsi delle immagini che mi interessano.. cioè quelle immagini che fanno riferimento all'id filtrato.. quindi non tutte le immagini presenti nella tabella.. poi magari se conosci anche un metodo per fare il resize a volo..
per il resize a volo avevo pensato alla classe Bitmap con il metogo GetThumbnailImage ..![]()
Voglio l'alt+s anche per FF
Su questo non ti so essere utile quindi spero altri che hanno avuto la stessa necessita' ti aiutino.Originariamente inviato da dops
per il resize a volo avevo pensato alla classe Bitmap con il metogo GetThumbnailImage ..
Saluti a tutti
Riccardo