11 messaggi dal 24 ottobre 2007
Buongiorno a tutti..
Ho la necessità di mostrare i dati estratti da un controllo sqldatasource in una GridView a seconda delle scelte effettuate dall'utente.Ovviamente paginando i risulti che spesso sono centinaia di righe.
Il controllo SqldataSource viene inizializzato con un SelectCommand all'apertura della pagina web.
<asp:SqlDataSource ID="SqlDataSourceListino" runat="server"
ConnectionString="<%$ ConnectionStrings:ListinoConnectionString %>"
SelectCommand="SELECT * FROM [Listino]">
</asp:SqlDataSource>

poi se l'utente effettua delle operazioni di ricerca(attraverso altri SelectCommand ="SELECT * FROM [Listino] WHERE ...."
La GridView mostra i risultati(è associata al SqlDataSourceListino)
ma premendo i pulsanti della paginazione perde il comando e rivisualizza la SELECT iniziale dell'apertura pagina web.
C'è da implementare qualcos'altro ?
Grazie
ci sei quasi. Devi sostituire SqlDataSource con una classe che ti faccia da DAL (Data Access Layer), su cui puoi implementare la paginazione:

Questo articolo http://msdn.microsoft.com/en-us/library/aa479347.aspx ti spiega passo passo come procedere

Davide Guida
Technical Architect @ Razorfish Healthware
http://davideguida.altervista.org
Con quali modalità assegni all'oggetto SqlDataSource i comandi relativi alle opzioni di ricerca?
Comunque, pur non essendo proprio quello che si definisce un amante di SqlDataSource (solo il nome mi mette i brividi!), prova a dare un'occhiata al seguente link e valuta se si tratta o meno del caso che hai proposto:

SqlDataSource SelectCommand not persisting on postback

Nicola Baldi
"Make things as simple as possible, but not simpler."
>>> My blog <<<
11 messaggi dal 24 ottobre 2007
Intanto grazie per la risposta ma purtroppo il sistema indicato nel link non funziona.Allego pertanto più informazioni possibili:
1= la griglia è una GridView che non viene associata al
SQLdataSource al momento della prima apertura della pagina.
2= il controllo SQLDataSource viene configurato nell'evento
Page_Load quindi viene associata la griglia.
La stringa di connessione è per il test il Locale ...
'Codice:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
With SqlDataSourceListino
.ConnectionString = "Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Listino.mdf;Integrated Security=True;User Instance=True"
.SelectCommand = "SELECT TOP (10) * FROM Listino"
End With
GridView1.DataSource = SqlDataSourceListino
GridView1.DataBind()
End Sub

L'utente effettua l'operazione di ricerca nell'evento:

Protected Sub ButtonCerca_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles ButtonCerca.Click

Dim strDati As String = "SELECT * FROM Listino WHERE Codice LIKE '" & Replace(TxtCercaCodice.Text, "'", "''") & "%'"

With SqlDataSourceListino
.SelectCommand = strDati
End With


GridView1.DataSource = SqlDataSourceListino
GridView1.DataBind()
End Sub

la griglia viene aggiornata.
nelle proprietà della griglia : Allowpaging=True
EnabledViewState=True

I risultati vengono visualizzati correttamente con il relativo indice di pagine sottostante.

ma premendo un numero di pagina compare il seguente errore:

L'evento PageIndexChanging generato dal GridView 'GridView1' non gestito.

per tentare una soluzione allora ho collegato con la procedura guidata la griglia al controllo SQLDataSource ma ottengo la problematica menzionata all'inizio.

Credo quindi che devo continuare con il sistema iniziale e scrivere del codice nell'evento PageIndexChanging della GriView1 ...
E' corretta questa sequenza ?
che tipo di codice dovrebbe essere scritto in questo evento ?
Grazie della disponibilità.
Chronodevis ha scritto:
Intanto grazie per la risposta ma purtroppo il sistema indicato nel link non funziona.

Quale link? il mio o quello di naighes ?

Ad ogni modo basta una semplice ricerca su Google. Eccoti un altro articolo: http://www.codeproject.com/KB/aspnet/PagingWithODS.aspx (questo ha anche un progetto di prova). Come già detto, dovresti sostituire SqlDataSource con un'altra classe per l'accesso ai dati (il che ti permetterebbe anche di gestire il tutto in maniera estremamente più elegante)

Davide Guida
Technical Architect @ Razorfish Healthware
http://davideguida.altervista.org
11 messaggi dal 24 ottobre 2007
Scusa mi riferivo al link di naighes...
Allora stò studiando le ultime info che mi hai dato.
nel frattempo ho trovato una soluzione che può funzionare e spero sia comunque utile ad altri:
1=
Nel database ho Creato una stored procedure con l'operatore LIKE

Codice Stored procedure:

ALTER PROCEDURE dbo.SelectQueryLIKE_Codice
(
@Codice nvarchar(100)
)
AS
SET NOCOUNT ON;
SELECT Categoria, Codice, Articolo, Descrizione, Produttore, Fornitore, Costo, Vendita, UM, IVA, Data, ID FROM Listino WHERE (Codice LIKE @Codice + '%')

2= Con la procedura Guidata(uso Visual Web Developer Express 2008)
ho associato il controllo SQLDtataSource alla storedProcedure
creata (SelectQueryLIKE_Codice) e associato l'origine del parametro al controllo TXTCercaCodice.

3= ho creato un CommandButton senza implemetare alcun codice in esso(serve infatti ad eseguire il refresh della pagina)
Inserendo quindi il valore nella casella di testo e premendo il button al successivo refresh la griglia aggiorna i dati ed il paging viene eseguito correttamente.

...
Grazie

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.