Fare una request.querystring da link per filtrare un datagrid ...

venerdì 21 maggio 2010 - 12.36

serrax Profilo | Junior Member

Salve a tutti....
sto avendo difficoltà a visualizzare dei valori inuna gridview filtrati da un link, mi spiego:
io ho due pagine web..
nella pagina2.aspx ho una datagrid dove sono caricati dei dati da db MySQL.
nella pagina1.aspx ho un link dove voglio che mi filtri i dati della pagina2.aspx

la pagina2.aspx si deve aprire sia con tutti i campi non filtrati (quindi con un link normale alla pagina), che con il link che filtra i valori con un valore già impostato....

ora il link che è nella pagina1.aspx è:
<a href='Prodotti/pagina2.aspx?dimensione=<%# DataBinder.Eval(Container.DataItem, "19") %>'>
mentre invece il code bheind della pagina2.aspx è:

MySqlConnection connection;
MySqlDataAdapter adapter;
string query;
connection = new MySqlConnection("server=localhost; username=root; password=giovanni; database=eshop;");
query = "SELECT * FROM `products` WHERE category_id=1 ORDER BY prezzo ;";
adapter = new MySqlDataAdapter(query, connection);
DataSet ds = new DataSet();

adapter.Fill(ds, "monitor");
myDatagrid.DataSource = ds.Tables["monitor"].DefaultView;

myDatagrid.DataBind();

il problema è che se apro il link non mi filtra niente, sicuramente la forma del link è sbagliata, o non so se devo aggiungere altro nel code behind.... tra l'altro premetto che voglio creare altri link simili......

qualcuno può aiutarmi???
grazie a tutti

martinez Profilo | Senior Member

Ciao ...

Perdonami ma non ci ho capito nulla ...

provo ad indovinare ...

Hai una pagina1.aspx che attraverso un link con querystring richiama una pagina2.aspx che a sua volta deve caricare una griglia o una qualsiasi altra cosa in base alla query e deve comunque contemplare la possibilità di non ricevere alcuna query nel link ... per cui visualizzare un range specifico ... ad esempio tutti i records ... nel caso di quesrystring nulla ...

se l'ipotesi è questa l'operazione è semplice ... ma nel tuo codice manca qualsiasi riferimento a quanto illustrato ... e cioè:

<a href='Prodotti/pagina2.aspx?dimensione=<%# DataBinder.Eval(Container.DataItem,"19") %>'>

fa riferimento ad una query di nome "dimensione" ... (supponiamo che quanto scritto tra "<%# ... %>" sia corretto) nel code behind di pagina2 devi contemplare un comportamento di pagina che intercetti la query e la utilizzi a secondo delle necessita qualcosa tipo questo:

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

inoltre nel tuo codice di esempio nella query che generi per interrogare il db ... non vi è alcun riferimento alla querystring in questione!!!

Non posso fornirti ulteriori dettagli perchè non riesco a capire da quanto letto quale sia la vera quesrystring che suppongo essere "dimensione" ne tantomeno poi la visualizzo nella query di pagina2 per estrarre i dati ... Ossia se il parametro filtro è "dimensione" tale valoe deve essere impostato come filtro sulla query che interroga il DB ...

Spero di essere stato utile

Antonio

serrax Profilo | Junior Member

Ciao Martinez e grazie per avermi risposto....
si in effetti la cosa non sono riuscita a spiegarla benissimo.... scusami ma sono nuovo in asp.net....

cmq credo che il problema sia nel link poichè ho aggiunto il codice che hai suggerito... però quando clicco sul link nel datagrid non mi esce alcun valore....
ho notato inoltre che nella barra degli indirizzi mi esce questo valore (sarà perchè sono in locale?):

pagina2.aspx?dimensione=<%# DataBinder.Eval(Container.DataItem,

quindi non credo che riesca a fare una query corretta, anche per questo probabilmente non mi esce alcun valore.....
suggerimenti??

martinez Profilo | Senior Member

>Ciao Martinez e grazie per avermi risposto....

Ciao anche a te!!!

>si in effetti la cosa non sono riuscita a spiegarla benissimo....
>scusami ma sono nuovo in asp.net....
>
Niente... prima o poi siamo tutti nuovi a tutto :)

>cmq credo che il problema sia nel link poichè ho aggiunto il
>codice che hai suggerito...


quale codice quello del code behind? Se si questo non c'entra nulla con la querystring ... che generi prima di aprire pagina2.aspx quel codice va messo nella pagian2.aspx per gestire i dati della quesrystring in arrivo ... quindi quando ormai pagina1.aspx e relativo link con query hanno completato il loro lavoro ...


però quando clicco sul link nel datagrid
>non mi esce alcun valore....
>ho notato inoltre che nella barra degli indirizzi mi esce questo
>valore (sarà perchè sono in locale?):
>
>pagina2.aspx?dimensione=<%# DataBinder.Eval(Container.DataItem,
>

appunto hai un errore ... come presumevo nella generazione della querystring "dimensione" ...

>quindi non credo che riesca a fare una query corretta, anche
>per questo probabilmente non mi esce alcun valore.....
>suggerimenti??

dove prelevi quel "=<%# DataBinder.Eval(....) %>" ????

se mi indichi cosa succede prima forse riesco a decriptare la querystring e di conseguenza a impostare la stringa per recuperare in pagina2aspx i dati dal DB che cerchi :)

in questo momento non so come aiutarti ulteriormente ... scusa e ciao!

serrax Profilo | Junior Member

ciao,
ho risolto... in pratica ho fatto così:
il link:
<a href='pagina2.aspx?modello=19'>

e nel code behind della seconda pagina:
if (Request.QueryString["dimensione"] == null)
{
//codice se dimensione è nulla
}
else
{
// codice se dimensione ha un valore
}

ora però vorrei creare un altro link tipo pagina2.aspx?tipo=LCD"
ma facendo così :

if (Request.QueryString["dimensione"]== null && Request.QueryString["tipo"]==null)
{
//codice se dimensione e tipo e nullo
}
else if (Request.QueryString ["dimensione"] == true)
{
// codice se ce valore su dimensione
}
else if (Request.QueryString["tipo"] == true)
{
//codice se esiste tipo
}

mi da errore dicendo che è impossibile applicare '==' a operandi di tipo string e bool

come faccio??

martinez Profilo | Senior Member

Ciao

credo che l'errore stia nel voler confrontare la querystring (stringa) con true (bool) quindi dovresti cambiare questo codice:

else if (Request.QueryString ["dimensione"] == true)

con questo

else if (Request.QueryString ["dimensione"] != null)

serrax Profilo | Junior Member

Wow....
grazie mille martinez sei stato gentilissimo,
ora funziona perfettamente grazie

martinez Profilo | Senior Member

Di nulla!

l'importante è risolvere ... ed a volte accettare le risposte come valide hihihihhihi!!!

Ciao e buon proseguimento di debug!

Antonio
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