Problema GridView e pagine

mercoledì 23 giugno 2010 - 14.39

CloudStrife91 Profilo | Newbie

Salve a tutti, ho un problema realizzando una pagina con asp.net e visual basic.
Nella pagina ho una GridView collegata ad un oggetto SqlDataSource che prende i dati da un database.
Ho attivato la divisione per pagine, ma se io cambio il comando select dell'oggeto SqlDataSource, eseguo il comando e provo a cambiare pagina, la GridView mi visualizza le vecchie pagine del primo comando select.

Spero di essere stato abbastanza chiaro, è la prima volta che utilizzo asp e visual web deleoper :-)

Grazie

gandalf_03_75 Profilo | Junior Member

Ciao io avrei del codice da passarti ma nel mio applicativo ho usato un List. Cmq io avrei tutto sia la paginazione, l'aggiunta della freccia UpArrow/DownArrow sulle colonne che vengono ordinate e la possibilità di scegliere quanti record visualizzare per pagina.
Se posso esserti utile puoi anche contattarmi in MP.

Ciao
-_-

TOPOAMORE Profilo | Expert

>Salve a tutti, ho un problema realizzando una pagina con asp.net

Ciao

>e visual basic.
>Nella pagina ho una GridView collegata ad un oggetto SqlDataSource
>che prende i dati da un database.
>Ho attivato la divisione per pagine, ma se io cambio il comando
>select dell'oggeto SqlDataSource, eseguo il comando e provo a
>cambiare pagina, la GridView mi visualizza le vecchie pagine
>del primo comando select.

Per "cambio il comando select" intendi che hai effettuato un filtro sui dati tramite un button o link???
se è cosi dopo l'evento click o altro del button fai effettuare il databind del gridview???

>
>Spero di essere stato abbastanza chiaro, è la prima volta che
>utilizzo asp e visual web deleoper :-)
>
>Grazie
Prego

__.__.__.__.__.__

ASP 2.0 - VB 2008

CloudStrife91 Profilo | Newbie

Innanzitutto, grazie per le risposte tempestive!

>Per "cambio il comando select" intendi che hai effettuato un
>filtro sui dati tramite un button o link???
>se è cosi dopo l'evento click o altro del button fai effettuare
>il databind del gridview???

io ho una textbox ed un bottone, alla pressione del bottone io cambio la proprietà di SqlDataSource: SelectCommand; in pratica faccio:

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


Ho già provato anche ad effettuare DataGrid.bind() seguito dalle due istruzioni sopracitate, ma non ho ottenuto nessun cambiamento XD!

EDIT:

Non ho il codice originale, l'ho riscritto a casa ed il problema si è riverificato, questo è il codice completo del bottone cerca:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

TOPOAMORE Profilo | Expert

>Innanzitutto, grazie per le risposte tempestive!

Prego

>Protected Sub btnCerca_Click(ByVal sender As Object, ByVal e
>As System.EventArgs) Handles btnCerca.Click
> Dim nome As String = txtCerca.Text
>Dim sql As String = "SELECT * FROM [elenco_utenti] WHERE cognome
>LIKE '" & nome & "%'"
>
> SqlDataSource1.SelectCommand = sql
>
>SqlDataSource1.Select(DataSourceSelectArguments.Empty)
>
> GridView1.DataBind()
>End Sub
>
Secondo me qui c'e' un'errore di progettazzione e non di codice nel senso:

se tu hai bisogno di una query parametrica imposta direttamente la query nel db è richiami quella passando il parametro da te impostato

Che tipo di db usi????

Se vuoi affrontare una tecnica del genere e ti serve una mano facci sapere

__.__.__.__.__.__

ASP 2.0 - VB 2008

CloudStrife91 Profilo | Newbie

Grazie, una mano sarebbe molto gradita, come ho detto sono i miei primi esperimenti !

Il db è un database sql presente su un server. L'ho creato utilizzando l'SQL Server Management (a casa ho tutti i prodotti in versione expess) ed immagino che le query parametrizzate di cui parli debbano essere create da li.

Quindi se ho capito mi basterebbe parametrizzare la parte del comando sql che segue LIKE, ma come posso fare?

TOPOAMORE Profilo | Expert

allora comincio col postarti un tutorial che ti spiega un po la base

http://database.html.it/guide/lezione/3400/le-stored-procedure/

poi serve un po di esercizio

e se non riesci ti aiutiamo ma la base la devi mettere tu

Oltrettutto nella sezione db di questo sito ci sono persone molto competenti e tra cui ti segnalo(per esperienza) lbenaglia

Vedi che riesci a capire e facci sapere

__.__.__.__.__.__

ASP 2.0 - VB 2008

CloudStrife91 Profilo | Newbie

Alla fine ci sono riuscito!

Ho usato un metodo un po' ibrido tra quello che mi hai consigliato tu e quello che usavo prima. Infatti, al posto di usare una stored procedure, ho inserito un parametro nel comando SELECT che usa l'oggetto SqlDataSource, ed andando a modificare quel parametro, la gridview mi aggiorna bene anche le pagine!

Grazie mille per l'aiuto!

TOPOAMORE Profilo | Expert

Bravo...

ma ti consiglio di passare alle stored anche per una questione di prestazioni.....

Utilizza il db in tutto e per tutto e usa il front end solamente per la visualizzazione del risultato

una volta presa la mano ti sara tutto molto piu semplice



__.__.__.__.__.__

ASP 2.0 - VB 2008

serrax Profilo | Junior Member

Ciao,
ho anche io un problema simile, ho un datagrid con una dropdownlist gestita da un pulsante, che mi filtra il datagrid stesso.....
filtrando il dagrid la prima pagina è corretta, ma quando vado alla seconda mi ritorna di nuovo il datagrid originale....

premetto che gestisco il Page_change con questa funzione:

public void Page_Changed(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
{
myDatagrid.CurrentPageIndex = e.NewPageIndex;
DataSet DSPageData = new DataSet();
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();
}

se provo ad inserire un altro Where dove indico il contenuto della dropdownlist, mi succede un casino se non seleziono nulla per filtrare il datagrid.... come posso fare???

CloudStrife91 Profilo | Newbie

Ciao, hai provato a cambiare la tua select, aggiungendo un parametro come è stato detto prima?

Penso possa funzionare una cosa del genere:
SELECT * FROM `products` WHERE (category_id=1) AND (nome_campo=@parametro1) ORDER BY prezzo

parametro1 di deafult varrà "%", in modo da non restringere la tua ricerca, mentre prenderà il valore del dropdownlist quando ne verrà selezionato uno

serrax Profilo | Junior Member

Ciao,
allora ho fatto come hai detto tu, il primo problema che mi si è presentato è che appena ho cambiato pagina, senza scegliere niente nella dropdownlist mi ha dato un errore del tipo:
HttpException: Valore di CurrenPageIndex non valido, deve essere maggiore o uguale a zero e minore di PageCount...

ho provato dunque ad inserire questo codice:
myDatagrid.CurrentPageIndex = 0;

così facendo l'errore non esce, però funziona tutto male..... mi spiego:
se non scelgo niente nella dropdownlist e vado alla seconda pagina non mi esce nessun valore..... se scelgo qualcosa sempre nella dropdownlist la prima pagina è corretta, ma non riesco ad accedere alle altre pagine poichè mi visualizza sempre la prima pagina.....

tra l'altro io ho altri controlli che mi filtrano il datagrid almeno altri 3 Request.QueryString quindi eventualmente la cosa si complicherebbe...... come posso fare?????

TOPOAMORE Profilo | Expert

Prima cosa apri un nuovo post con titolo esatto...

Visto che qusto thread è stato marcato come risolto poca gente verrà a vederlo

__.__.__.__.__.__

ASP 2.0 - VB 2008

serrax Profilo | Junior Member

ok,
in ogni caso ho risolto..... grazie
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