Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2001
    Messaggi
    573

    paginazione datagrid con datareader

    Manco riapre il forum che subito vi rompo le scatole!

    Dunque ho il mio datagrid creato così:

    Dim sql As String = "SELECT * FROM S_Prodotti"

    Dim CmdCa As New SqlCommand(sql, Conn)
    Dim RCa As SqlDataReader
    RCa = CmdCa.ExecuteReader
    dgCarrello.DataSource = RCa
    dgCarrello.DataBind()


    ma si può paginare? se si non ho idea di come si faccia, tutti gli esempi che ho visto utilizzano un dataset

    Ciao grazie

  2. #2

    Re: paginazione datagrid con datareader

    Originariamente inviato da elisa_rm74
    ma si può paginare? se si non ho idea di come si faccia, tutti gli esempi che ho visto utilizzano un dataset
    Se non hai bisogno di un dataset puoi usare una singola datatable. Non usare un datareader per popolare una datagrid cercando poi di paginarla, non fa per lui.
    Saluti a tutti
    Riccardo

  3. #3
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Si che si può paginare. Ma non è una cosa banale. Dipende dal database. Con Access si fa in un modo e con Oracle in un altro.
    Puoi vedere qualcosa su "Programmare asp.net" di Dino Esposito, o su "programmare visualbasic.net" di Francesco Balena.
    Pietro

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2001
    Messaggi
    573
    sempre tu che mi aiuti! mi sa che minimo ti dovrò offrire un caffè!

    non l'ho mai fatto conosci un esempio?

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2002
    Messaggi
    4,127

  6. #6
    Originariamente inviato da pietro09
    Si che si può paginare. Ma non è una cosa banale. Dipende dal database. Con Access si fa in un modo e con Oracle in un altro.
    Puoi vedere qualcosa su "Programmare asp.net" di Dino Esposito, o su "programmare visualbasic.net" di Francesco Balena.
    emh... ripeto, non usare un datareader come datasource di una datagrid soprattutto se devi paginarla in piu' pagine. Il datareader non e' fatto per fare questo lavoro. Se devi gestire dati con una datagrid probabilmente avrai anche bisogno di selezionare singole righe, editarle eliminarle ecc ecc. e il datareader farebbe fatica a soddisfare queste necessita' (e' forward only e puo essere letto dall'inizio alla fine senza potersi fermare o tornare indietro).
    Detto questo, per paginare i record puoi usare l'sql come mi sembra ti consigli pietro e una dataview (datatable).
    Saluti a tutti
    Riccardo

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2001
    Messaggi
    573
    grazie a tutti ora provo a vedere il link suggerito... non usavo il dataset, che tra l'altro mi avrebbe risolto tanti problemi perchè lo so paginare , per avrei bisogno di avere un accesso diretto ai dati tutto qui...

  8. #8
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Originariamente inviato da riccardone
    emh... ripeto, non usare un datareader come datasource di una datagrid soprattutto se devi paginarla in piu' pagine. Il datareader non e' fatto per fare questo lavoro. Se devi gestire dati con una datagrid probabilmente avrai anche bisogno di selezionare singole righe, editarle eliminarle ecc ecc. e il datareader farebbe fatica a soddisfare queste necessita' (e' forward only e puo essere letto dall'inizio alla fine senza potersi fermare o tornare indietro).
    Detto questo, per paginare i record puoi usare l'sql come mi sembra ti consigli pietro e una dataview (datatable).
    A dire la verità, io utilizzo sempre il DataTable per popolare un datagrid. Ho fatto un metodo pubblico in overloads che accetta pure i parametri per la paginazione e lo uso perchè è molto comodo.
    Sì, ma faccio così perchè sono poltrone, perchè credo che la soluzione ottimale sia l'uso di un DataReader perchè non consuma memoria aggiuntiva ed è molto leggero. Per quanto riguarda la paginazione, non l'ho mai utilizzata (sempre perchè sono poltrone), ma credo che si possa. Come ho detto però, non è banale farlo, ma richiede un certo impegno

    Io ho grande rispetto per quello che dici (si vede che sei esperto), però non capisco: a che disturba il fatto che il Reader legge avanti, non si ferma, e non va indietro?

    Ciao
    Pietro

  9. #9
    Originariamente inviato da pietro09
    ...a che disturba il fatto che il Reader legge avanti, non si ferma, e non va indietro?
    Mi sembrava di averlo detto, comunque specifico meglio: un esempio di "disturbo" o, meglio, effetto negativo e' proprio nella paginazione. Se utilizzi un datareader, ogni volta che l'utente cambia pagina devi effettuare una nuova query al db e visualizzare l'intero set di record restituiti (perche' appunto il dr non ha la capacita' di visualizzartene solo una parte). Altri problemi li dovresti incontrare ogni volta che hai bisogno di manipolare singole righe del datagrid. Quindi, non dico che NON PUOI usare un datareader ma dico che e' meglio usare una datatable. Forse il datareader puoi pensare di usarlo quando sai che ci sono pochi record e la datagrid deve solo visualizzarli senza farci altro.
    Saluti a tutti
    Riccardo

  10. #10
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Originariamente inviato da riccardone
    Mi sembrava di averlo detto, comunque specifico meglio: un esempio di "disturbo" o, meglio, effetto negativo e' proprio nella paginazione. Se utilizzi un datareader, ogni volta che l'utente cambia pagina devi effettuare una nuova query al db e visualizzare l'intero set di record restituiti (perche' appunto il dr non ha la capacita' di visualizzartene solo una parte). Altri problemi li dovresti incontrare ogni volta che hai bisogno di manipolare singole righe del datagrid. Quindi, non dico che NON PUOI usare un datareader ma dico che e' meglio usare una datatable. Forse il datareader puoi pensare di usarlo quando sai che ci sono pochi record e la datagrid deve solo visualizzarli senza farci altro.
    Vediamo un poco. E' possibile implementare un meccanismo mediocre passando un record di partenza e un numero di record come argomenti al metodo Fill del DataAdapter. Però sappiamo che il DataAdapter legge tutti i record prima di quelli a cui si è effettivamente interessati, e quindi li scarta.
    Questo approccio, che funziona bene con resulset di piccole dimensioni, non dovrebbe essere mai adottato nel caso di tabelle contenenti più di qualche centinaio di righe.
    Perciò, per implementare un meccanismo di paginazione migliore è necessario rimboccarsi le maniche e cominciare a scrivere codice SQL più intelligente. Non sbircio più dal libro perchè è una cosa lunga.

    Perciò, credo che il metodo più scalare sia proprio quello che tu consideri un difetto, cioè, leggere ogni volta il database ad ogni richiesta di nuova pagina.
    Non ci sono neanche problemi quando si debbono manipolare singole righe del datagrid.

    Naturalmente, detto questo, in qualche circostanza, non è detto che sia vantaggioso popolarsi un datatable, conservarlo in una variabile di stato, e riutilizzarlo nei successivi postback.

    Guardando bene la tua ultima affermazione, penso sinceramente che debba essere esattamente invertita: Il DataTable andrebbe utilizzato solo con poche centinaia di righe, altrimenti è meglio il DataReader.
    Ma, è solo una mia opinione

    Ciao
    Pietro

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.