27 messaggi dal 07 luglio 2008
Ciao a tutti.

Una domanda (spero) semplice.

Ho un repeater che riempie una tabella (HTML) con dati presi da un db (dataset, datasource, databind etc. etc...) e fin qua tutto ok.

Supponendo che io abbia nel db una tabella con 100 righe posso fare in modo che il repeater mi scriva nella tabella HTML solo le righe da 70 a 90 ?

Tutto ciò senza intervenire sulla stringa sql "SELECT TOP ....." che popola il dataset

Mi spiego meglio: è possibile caricare tutte e 100 le righe nel dataset e fare in modo che nel repeater vengano visualizzate solo le righe da 70 a 90?

Insomma qualcosa di simile agli array dove con un'istruzione for/next posso far scrivere solo le righe che mi interessano?

Grazie fin d'ora a tutti....
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao,

agserna ha scritto:

è possibile caricare tutte e 100 le righe nel dataset e fare in modo che nel repeater vengano visualizzate solo le righe da 70 a 90?

Sì. Se non è indispensabile che tutte e 100 le righe siano caricate nel Dataset, allora puoi usare uno degli overload del metodo Fill del SqlDataAdapter.
http://msdn.microsoft.com/it-it/library/0z5wy74x.aspx

Questo metodo accetta l'indice del record da cui iniziare e il numero di record da prendere. Il tuo DataSet (o DataTable) verrà popolato con le sole righe necessarie al repeater.
using (var conn = new SqlConnection(connectionString)) {
    conn.Open();
    using (var adapter = new SqlDataAdapter("SELECT * FROM tabella", conn))
    {
        var dt = new DataTable();
      
      //Di tutti i record restituiti dalla SELECT, ne salto 70 e prendo solo i successivi 20
        adapter.Fill(70, 20, dt);
      
      //Databinding. La DataTable è stata riempita con soli 20 records, così non teniamo in memoria records inutili
        repeater1.DataSource = dt;
      repeater1.DataBind();
    }
    conn.Close();
}


Se invece sei obbligato a caricare tutte le 100 righe nel DataSet, perché magari ti servono anche ad altro, allora puoi crearne un sottoinsieme con Linq-to-datasets. E' facile grazie ai metodi Skip e Take.
repeater1.DataSource = tuaDataTable.AsEnumerable().Skip(70).Take(20).CopyToDataTable();
repeater1.DataBind();


ciao
Modificato da BrightSoul il 23 giugno 2013 13.25 -

Enjoy learning and just keep making

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.