Scambio di dati tra Web Form

lunedì 16 aprile 2007 - 08.40

Giscotech Profilo | Junior Member

Salve a tutti.

Il mio problema è che ho creato una webform in cui ho inserito degli asp:HyperLink con delle immagini che rappresentano altrettanti loghi di aziende.

Ora il mio intento sarebbe quello di reindirizzare l'utente in una pagina di dettaglio e filtrare i dati della tabella che risiede sul db in base al nome dell'azienda.

Qualcuno saprebbe dirmi come fare?

Grazie in anticipo

Giuseppe Scordo.

alx_81 Profilo | Guru

>Salve a tutti.
Ciao!
>
>Il mio problema è che ho creato una webform in cui ho inserito
>degli asp:HyperLink con delle immagini che rappresentano altrettanti
>loghi di aziende.
>Ora il mio intento sarebbe quello di reindirizzare l'utente in
>una pagina di dettaglio e filtrare i dati della tabella che risiede
>sul db in base al nome dell'azienda.
>
>Qualcuno saprebbe dirmi come fare?
Ci sono vari metodi, e poi il tutto dipende da come tu hai scritto il database..
In linea di massima, potresti creare querystring diversi, uno per ogni immagine, con un parametro tipo "Dettaglio.aspx?azienda=1"..
Sul tuo database devi prevedere una tabella delle aziende possibili, dalla quale poi si dirama tutta la struttura che devi far vedere per ogni azienda.. A questo punto, nella pagina di dettaglio dovresti richiedere il querystring e ricavare il parametro "azienda" ed in base a quello, filtrare le tue tabelle (le quali dovranno avere il legame con la prima tabella che ti ho indicato)..
In macroanalisi potrebbe essere così..

Com'è fatto il tuo db?
>
>Grazie in anticipo
>
>Giuseppe Scordo.

Alx81 =)

http://blogs.dotnethell.it/suxstellino

Giscotech Profilo | Junior Member

ciao alx_81,
nel mio db è presente una tabella con un campo fornitore che contiene dati del tipo nomeazienda1,nomeazienda2 ecc ecc.

dalla pagina contenente i marchi io vorrei poter clicckare sull'immagine , penso con qualcosa del tipo


paginadidestinazione.aspx?Azienda='nomeazienda'

e all'apertura , filtrare i dati in modo da visualizzare solo quelli dell'azienda selezionata.

Le immagini delle aziende io li carico in un asp:hyperlink e a quanto ho capito questgo è un problema per realizzare questo tipo di operazione.

Grazie

Giuseppe Scordo

gigi90 Profilo | Senior Member

Per quanto riguarda i dati da filtrare, cio lo devi effettuare a livello di database, con dei comandi del tipo:

SELECT Info1,Info2,Info3 FROM Fornitori WHERE Azienda=Nomeazienda

poi visualizzi i risultati.


Comunque, spiegaci megli come è fatto il database e cosa vuoi visualizzare esattamente.

Giscotech Profilo | Junior Member

Allora ragazzi,
ho la mia tabella articoli con circa 15000 record suddivisi oltre che per 4 categorie anche per fornitore.

Nel campo fornitore , non ho un codice , ma il nome dell'azienda.

Non penso ci sia più tanto da conoscere sul db.

Ho creato una pagina aspx con tutti i loghi di questi fornitori utilizzando asp:hyperlink ed impostandoci sopra il logo delle aziende.
Ora l'oggetto hyperlink non ha la proprietà RedirectUrl come il button.

Io devo , cliccando sull'immagine , andare su una pagina dettaglio e filtrare i record in base al parametro passato.
Il parametro è rappresentato dal nome del fornitore. ex paginadettaglio.aspx?Fornitore='Airwell'
Ora io voglio comprendere come realizzare questo passaggio.

Grazie

Giuseppe Scordo

gigi90 Profilo | Senior Member

Allora al posto dell'iperlink utilizza l'oggetto LinkButton, ce ne metti tanti quanti sono i fornitori e agendo sull'evento click di ognuno redirigi l'utente sulla seconda pagina Prodotti.aspx passandogli la querystring con il nome del fornitore diverso per ogni click sui vari pulsanti in questo modo qui:

protected void LinkButton1_Click(object sender, System.EventArgs e) {
Response.Redirect("Prodotti.aspx?Fornitore=Nomefornitore1");
}

protected void LinkButton2_Click(object sender, System.EventArgs e) {
Response.Redirect("Prodotti.aspx?Fornitore=Nomefornitore2");
}

ecc..

poi passi allla seconda pagina Prodotti.aspx inserisci al suo interno una semplice label, nell'evento Page_Load inserisci il seguente codice:

protected void Page_Load(object sender, EventArgs e)
{
string stringaconnessione="Qui metti la stringa di connessione";
using(OleDbConnection conn=new OleDBConnection(stringaconnessione)){
string comandoSQL="SELECT NomeProdotto FROM Prodotti WHERE Fornitore='"+Request.QueryString["Fornitore"].ToString()+"'";

OleDbCommand com=new OleDbCommand(comandoSQL);
DataReader rd=com.ExecuteReader();
while(rd.read()){
label1.Text=rd["NomeProdotto"].ToString();
}

}
}


Questo codice ti stampa nella pagina tutti i prodotti aventi quel fornitore, e ovvio che ti puoi cambiare l'istruzione SQL a seconda di come è strutturato il database comunque il ragionamento per fare quello che vuoi ottenere tu è quello che ti ho appena fatto vedere.

martinez Profilo | Senior Member

Ciao,
va bene che tutto fa brodo... ma questo non mi sembre ne il miglior sistema di gestire le cose ne tantomeno una soluzione valida...

QUOTE ON:
Allora al posto dell'iperlink utilizza l'oggetto LinkButton,
ce ne metti tanti quanti sono i fornitori e agendo sull'evento
click di ognuno redirigi l'utente sulla seconda pagina Prodotti.aspx
QUOTE OFF

questo è un sistema che fa diventare asp.net statico ed inutile...

tanto vale visto che volete inserire a manina, i link nella prima pagina, usate un legerissimo oggetto HTML anchor senza nemmeno l'ausilio del "runat=server" per redirigere l'utente alla seconda pagina aspx evitando anche la scrittura di tanto inutile codice tipo questo:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

e quindi riallacciarsi a quanto da te scritto per la seconda pagina (anche se di strada per migliorare ce ne sta !!!

scusate se sembro critico ma il mio vuole essere solo un aiuto/suggerimento per migliorare le cose e visto che ci siamo, un modo semplice per gestire tutto, potrebbe essere, a grandi linee riassunto così:

- nella prima pagina inserisco un datasource col quale lavoro bene e mi trovo meglio (objectdatasource)
- poi creo la stored procedure nel database che mi fornisce l'elenco delle aziende, il relativo logo, ma soprattutto un ID sicuro su cui lavorare
- inserisco anche un semplice repeater lo collego al datasource mi imposto un leggero template ed ottengo automaticamente dal mio db la lista delle aziende... con relativo link immagine del logo e cosa altro voglio...

nella seconda pagina creo un altro datasource prelevo l'id dalla querystring e lo fornisco al datasource che mi ritorna i singolo dati aziendali... qui mi posso sbizzarrire come mi piace per inserire i dati nella pagina... ma posso sempre usare un repeater per rimanere sul leggero...

Questa cmq. non è la soluzione ma una delle soluzioni possibili. (la più scarsa) Sappiate che asp.net 2 fornisce anche il Cross-Page Postback per citarne una inerente al tema

Se questo esempio vi piace possiamo completarlo insieme ...
Saluti

alx_81 Profilo | Guru

>Ciao,
>va bene che tutto fa brodo... ma questo non mi sembre ne il miglior
>sistema di gestire le cose ne tantomeno una soluzione valida...
Quoto..

però se vogliamo essere veramente pignoli, ci sarebbe da cambiare anche la base dati, e portarla almeno in 3a forma normale, il che porterebbe ad ottenere molti vantaggi in ambito di integrità, consistenza e manutenibilità dei dati..
Tipo, una tabella delle aziende, padre di quella indicata all'inizio del post, legate da un id, univoco sicuramente e non pesante ed aleatoria come una descrizione può essere.. Consiglio quindi di trovare documentazione sulle forme normali e in generale sulle best practices per scrivere le relazioni.. Però lo lascio come studio Altrimenti ci sarebbe da dire un'eternità di cose..
Diciamo che se hai la possibilità di cambiare la base dati, fallo subito per prevenire problemi futuri; un buon database è un'ottima partenza per lo sviluppo di una buona applicazione..
ciao!


Alx81 =)

http://blogs.dotnethell.it/suxstellino

gigi90 Profilo | Senior Member

Nel SelectCommand del DataSource associato al Repeater, come crei la query che confronta il fornitore con la querystring x filtrare solo i prodotti di quel fornitore.

Giscotech Profilo | Junior Member

Premesso che le considerazioni fatte da voi soto tutte valide,
sono daccordo con il fatto che a malinquore dovrò andare ad aggiungere un campo id che si riferisce alla tabella fornitori.

Cmq faccio delle prove e vi faccio sapere com'è finita.

Grazie

Giuseppe Scordo

Giscotech Profilo | Junior Member

ciao gigi,
ma io ho l'esigenza di mettere un'immagine nel link come faccio a utilizzare il linkbutton?

martinez Profilo | Senior Member

>ma io ho l'esigenza di mettere un'immagine nel link come faccio
>a utilizzare il linkbutton?

Per darti veramente una mano servirebbe conoscere almeno le tabelle del tuo database ed anche sapere i dati che vuoi presentare nelle 2 pagine in questione

inserire un immagine linkabile non è per nulla un problema in asp.net ...

se vuoi maggiore aiuto posta il materiale che hai a disposizione e vedremo il da fare

Saluti

Giscotech Profilo | Junior Member

ciao gigi,

sono riuscito a passare il parametro nella seconda pagina.
Adesso se utilizzo il tuo sistema , mi viene stampato solo l'ultimo record , come mai?

quale oggetto di accesso ai dati posso usare per passargli il parametro ottenuto dal querystring?

se cerco di inserire il parametro quesrystring , ad esempio in un AccessDataSource , mi viene restituito un errore in cui mi dice che questo tipo di oggetto non acceta questo tipo di parametro.

allora cosa usare?

grazie per l'aiuto.

Giuseppe Scordo

gigi90 Profilo | Senior Member

Si,scusa ho fatto un errore di assegnazione, cambia:

while(rd.read()){
//Ogni volta assegna il nuovo valore, quindi quando arriva all'ultimo record, l'ultimo valore assegnato è appunto questo.
label1.Text=rd["NomeProdotto"].ToString();
}

in


while(rd.read()){
//Accoda agli altri record il record che sta leggendo, e va a capo(ovviamente puoi modificare la visualizzazione utilizzando l'html
label1.Text+=rd["NomeProdotto"].ToString()+"<br>";
}


P.S:Al posto della label, utilizza il controllo Literal e più o meno simile(tranne il fatto che non permette la formattazione, ma ovviamente a quella ci pensi tu accodando al Literal tag HTML

Ciao

gigi90 Profilo | Senior Member

Comunque come dice martinez, e meglio utilizzare il controllo built-in di Asp.Net 2.0 Repeater, che ti permette di estrarre dati da una sorgente dati come un database e visualizzarli tramite un layout che devi definire tu tramite l'HTML.
Per quanto riguarda l'AccessDataSource associato al repeater, per passare la querystring all'instruzione SQL tramite la procedura guidata, vai in "Configura origine dati..." del datasource, selezioni il database .mdf vai avanti, selezioni le tabelle e i campi da estrarre e clicchi sul pulsante WHERE che ti permette di impostare dei criteri di selezione, poi selezioni la colonne Fornitore, imposti come operatore l' '=' e dalla lista origine selezioni querystring, e a lato nella textbox QueryString ci metti Fornitore.
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5