Visualizzazione dei risultati da 1 a 5 su 5

Discussione: DataSet e repeater

  1. #1

    DataSet e repeater

    salve!!
    ho una classe che interroga il db che ha questo metodo:
    codice:
            public DataSet getGiacenze(string articoli)
            {
                OdbcCommand cmd = new OdbcCommand();
                OdbcDataAdapter adapter = new OdbcDataAdapter();
                DataSet ds = new DataSet();
                try
                {
                    cmd.CommandText = ".........";
                    cmd.Connection = conn;
                    adapter.SelectCommand = cmd;
                    adapter.Fill(ds);
                }
                catch (Exception ex)
                {
                    throw new Exception(ex.Message);
                }
                finally
                {
                    ds.Dispose();
                    conn.Close();
                }
                return ds;
            }
    a questo punto vorrei riempire un repeater con questi dati.
    da quanto ho capito devo fare una classe wrapper da riempire e poi passarla al repeater.
    la classe l'ho fatta:
    codice:
        public class Giacenze
        {
            public string articolo { get; set; }
            public string pacchetto { get; set; }
            public int qta { get; set; }
        }
    pensavo creare vari oggetti con un foreach nel primo metodo che ho postato.
    solo che nn ho capito bene come fare.
    un aiuto??

  2. #2
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    Credo che basti

    ASPX:
    codice:
        <asp:Repeater runat="server" ID="rpt">
              <ItemTemplate>
                <%# Eval("articolo")%>
    
                <%# Eval("pacchetto") %>
    
                <%# Eval("qta")%>
    
              </ItemTemplate>
        </asp:Repeater>
    CS:
    codice:
         ds = getGiacenze("stringa articoli");
         rpt.DataSource = ds;
         rpt.DataBind();
    (codice minimo)

  3. #3
    si infatti ho fatto così tralasciando l'oggetto Giacenze.
    grazie!!!

  4. #4
    faccio solo una precisazione:
    un DataSet è un "contenitore" di DataTable (permettetemi il termine).

    In questo caso funziona poiché il DataSet viene creato con una sola DataTable, di conseguenza l'assegnazione alla proprietà datasource prende la prima (e unica) tabella presente:
    codice:
    rpt.DataSource = ds;
    viceversa se il DataSet fosse più complesso.

    Se la tua funzione restituisce una sola tabella e non necessita di altro (ovvero viene usata solo in questo contesto o simile), fai che restituire direttamente un DataTable alla funzione.

  5. #5
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    visto che ci siamo, per completezza riportiamo il codice (MSDN) nel caso si voglia volontariamente riempire un Dataset con più tabelle:

    codice:
    //....(customerConnection e orderConnection sono due connessioni valide)
    
    SqlDataAdapter custAdapter = new SqlDataAdapter("SELECT * FROM dbo.Customers", customerConnection);
    
    OleDbDataAdapter ordAdapter = new OleDbDataAdapter("SELECT * FROM Orders", orderConnection);
    
    DataSet customerOrders = new DataSet();
    
    custAdapter.Fill(customerOrders, "Customers");
    ordAdapter.Fill(customerOrders, "Orders");

    Si avranno due Datatable nel Dataset:

    customerOrders.Tables["Customers"] (oppure [0])
    e
    customerOrders.Tables["Orders"] (oppure [1])


    Inoltre, per fare cio' che dice Gluck, dovresti modificare il tuo metodo così:
    codice:
    public DataTable getGiacenze(string articoli)
            {
                OdbcCommand cmd = new OdbcCommand();
                OdbcDataAdapter adapter = new OdbcDataAdapter();
                DataSet ds = new DataSet();
                try
                {
                    cmd.CommandText = ".........";
                    cmd.Connection = conn;
                    adapter.SelectCommand = cmd;
                    adapter.Fill(ds);
                }
                catch (Exception ex)
                {
                    throw new Exception(ex.Message);
                }
                finally
                {
                    ds.Dispose();
                    conn.Close();
                }
                return ds.Tables[0];
            }
    pero' se svisceriamo sempre in questo modo non lavorero' piu'...

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 © 2025 vBulletin Solutions, Inc. All rights reserved.