Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1
    Utente bannato
    Registrato dal
    Jun 2004
    Messaggi
    1,117

    Impostazione grafica in una tabella

    Ciao a tutti, ho due tabelle

    Articoli
    cod-desc-categoria
    001 - dfdsf - A
    002 - dgfdfd - B
    003 - dsdfd - B
    004 - dgdd - B
    005 - dgffd - A


    Categorie
    cod-desc
    A-CategoriaA
    B-CategoriaB


    vorre fare questo:

    ordinare la tabella Articoli per categria ... OK

    a questo vorrei visualizzare tutti i codici in una tabella riassuntiva con questo layout

    riga con il titolo della categoria
    elenco articoli
    ....
    riga con il titolo della categoria
    elenco articoli
    ....
    riga con il titolo della categoria
    elenco articoli
    ....


    esempio

    CATEGORIA A
    001 - dfdsf - A
    005 - dgffd - A

    CATEGORIA B
    002 - dgfdfd - B
    003 - dsdfd - B
    004 - dgdd - B

    ecc...


    Qualcuno può spiegarmi come fare???

    Grazie infinite per l'aiuto

  2. #2

    Re: Impostazione grafica in una tabella

    Originariamente inviato da valeria75
    Qualcuno può spiegarmi come fare???
    Con due repeater annidati. Non ho la possibilita di scriverti codice in questo momento ma intanto ti consiglio di approfondire l'uso del repeater
    Saluti a tutti
    Riccardo

  3. #3
    Utente bannato
    Registrato dal
    Jun 2004
    Messaggi
    1,117
    Ci ho provato ma non sono riuscita....

    potresti indicarmi come fare???


  4. #4
    Originariamente inviato da valeria75
    Ci ho provato ma non sono riuscita....

    potresti indicarmi come fare???

    cosi a immaginazione... imposti la datasource del primo repeater alla fonte dati che restituisce l'elenco delle categorie. All'interno dell'itemtemplate del primo repeater inserisci un altro repeater al quale importi la datasource alla fontedati dell'elenco articoli. Quest'ultima fonte dati accettera' un parametro IDCategoria che serve appunto a filtrare gli elenchi di articoli restituiti.
    Inizia a mettere in pratica queste indicazioni poi quando incontri problemi posta un po' di codice
    Saluti a tutti
    Riccardo

  5. #5
    Utente bannato
    Registrato dal
    Jun 2004
    Messaggi
    1,117
    Sai dirmi dove posso trovare degli esempi a riguardo?

    Grazie

  6. #6
    Originariamente inviato da valeria75
    Sai dirmi dove posso trovare degli esempi a riguardo?
    CodeBehind
    codice:
    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            'Inserire qui il codice utente necessario per inizializzare la pagina
            If Not Page.IsPostBack Then
                Page.DataBind()
            End If
        End Sub
    
    Public Function GetCategorie() As DataTable
            Dim dt As New DataTable
            dt.Columns.Add("IDCategoria", System.Type.GetType("System.Int32"))
            dt.Columns.Add("Categoria")
            dt.Columns("IDCategoria").Unique = True
    
            Dim dr As DataRow
    
            dr = dt.NewRow
            dr("IDCategoria") = 1
            dr("Categoria") = "Moda"
            dt.Rows.Add(dr)
    
            dr = dt.NewRow
            dr("IDCategoria") = 2
            dr("Categoria") = "News"
            dt.Rows.Add(dr)
    
            Return dt
        End Function
    
        Public Function GetArticoli(ByVal _idCategoria As Integer) As DataView
            Dim dv As New DataView(getArticoliAsDataTable)
            dv.RowFilter = String.Format("IDCategoria = {0}", _idCategoria)
            Return dv
        End Function
    
        Private Function getArticoliAsDataTable() As DataTable
            Dim dt As New DataTable
            dt.Columns.Add("IDArticolo", System.Type.GetType("System.Int32"))
            dt.Columns.Add("IDCategoria", System.Type.GetType("System.Int32"))
            dt.Columns.Add("Articolo")
            dt.Columns("IDArticolo").AutoIncrement = True
            dt.Columns("IDArticolo").Unique = True
    
            Dim dr As DataRow
    
            dr = dt.NewRow
            dr("IDCategoria") = 1
            dr("Articolo") = "Prova articolo di moda"
            dt.Rows.Add(dr)
    
            dr = dt.NewRow
            dr("IDCategoria") = 2
            dr("Articolo") = "Prova articolo di news"
            dt.Rows.Add(dr)
    
            Return dt
        End Function
    Pagina aspx
    codice:
    <asp:Repeater id=repCategorie runat="server" DataSource="<%# GetCategorie %>">
    				<ItemTemplate>
    					
    
    <%# DataBinder.Eval(Container.DataItem, "Categoria") %></p>
    					<asp:Repeater id="repArticoli" runat="server" DataSource='<%# GetArticoli(DataBinder.Eval(Container.DataItem, "IDCategoria")) %>'>
    						<ItemTemplate>
    							<%# DataBinder.Eval(Container.DataItem, "Articolo") %>
    						</ItemTemplate>
    					</asp:Repeater>
    				</ItemTemplate>
    			</asp:Repeater>
    Ho vinto qualcheccousa?
    Saluti a tutti
    Riccardo

  7. #7
    Utente bannato
    Registrato dal
    Jun 2004
    Messaggi
    1,117
    Basandomi sulla vostra soluzione ho cercato di adattare la mia soluzione ma ottengo alcuni errori:

    tabelle

    Prodotti:
    cod
    descrizione
    IDSottocategoria


    Sottocategorie:
    cod
    IDCategoria
    descrizione




    private void Page_Load(object sender, System.EventArgs e)
    {
    ...

    if(!IsPostBack)
    {
    BindGrid();
    }

    }



    protected void BindGrid()
    {

    // creo il DataSet per il DataGrid
    GetSottoCategorie();

    repCategorie.DataSource = DsDati.Tables["Categorie"].DefaultView;
    repCategorie.DataBind();

    }





    public void GetProdotti(string categoria)
    {

    string query = "SELECT * FROM Prodotti WHERE IDSottocategoria='" + categoria.ToString() + "'";

    try
    {
    DsDati = new DataSet();

    String SQLProdotti = query;
    OleDbDataAdapter myCommandProdotti = new OleDbDataAdapter(SQLProdotti,myConnection);
    myCommandProdotti.SelectCommand.CommandType=Comman dType.Text;
    myCommandProdotti.Fill(DsDati, "Prodotti");

    myConnection.Close();

    }

    catch (Exception exc)
    {
    string debug = exc.Message;
    }


    }




    public void GetSottoCategorie()
    {

    try
    {
    DsDati = new DataSet();

    String SQLCat = "SELECT * FROM Sottocategorie IDCategoria Padre='S'";
    OleDbDataAdapter myCommandCat = new OleDbDataAdapter(SQLCat,myConnection);
    myCommandCat.SelectCommand.CommandType=CommandType .Text;
    myCommandCat.Fill(DsDati, "Categorie");

    myConnection.Close();

    }

    catch (Exception exc)
    {
    string debug = exc.Message;
    }


    }



    Nel codice HTML



    <asp:Repeater id="repCategorie" runat="server">
    <ItemTemplate>


    <%# DataBinder.Eval(Container.DataItem, "Descrizione") %></p>
    <asp:Repeater id="repArticoli" runat="server" DataSource='<%# GetProdotti(DataBinder.Eval(Container.DataItem, "Cod")) %>'>
    <ItemTemplate>
    <%# DataBinder.Eval(Container.DataItem, "Descrizione") %>
    </ItemTemplate>
    </asp:Repeater>
    </ItemTemplate>
    </asp:Repeater>



    Uno degli errori ottenuti è:

    Compilation Error
    Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately.

    Compiler Error Message: CS1502: The best overloaded method match for 'NewPatanegra.Salumi.GetProdotti(string)' has some invalid arguments

    Source Error:



    Line 16: <ItemTemplate>
    Line 17:

    <%# DataBinder.Eval(Container.DataItem, "Descrizione") %></p>
    Line 18: <asp:Repeater id="repArticoli" runat="server" DataSource='<%# GetProdotti(DataBinder.Eval(Container.DataItem, "Cod")) %>'>
    Line 19: <ItemTemplate>
    Line 20: <%# DataBinder.Eval(Container.DataItem, "Descrizione") %




    dove sbaglio???

    :master:

  8. #8
    Originariamente inviato da valeria75
    Uno degli errori ottenuti è:
    The best overloaded method match for 'NewPatanegra.Salumi.GetProdotti(string)' has some invalid arguments
    probabilmente l'errore ottenuto dipende dal fatto che
    codice:
     DataSource='<%# GetProdotti(DataBinder.EvalContainer.DataItem, "Cod")) %>'>
    non passa niente come parametro "Cod".
    Ti consiglio di assegnare la datasource del primo repeater nel codice aspx
    codice:
    <asp:Repeater id="repCategorie" runat="server" DataSource=.....> 
    di "tipizzare" correttamente i parametri. Se ad esempio sai che IDCategoria e' un integer, il relativo paramtro deve essere dello stesso tipo (e non string)
    codice:
    public void GetProdotti(int   categoria)
    Basandomi sulla vostra soluzione
    non mi hanno ancora fatto re quindi puoi darmi del tu
    Saluti a tutti
    Riccardo

  9. #9
    Utente bannato
    Registrato dal
    Jun 2004
    Messaggi
    1,117
    Io non capisco proprio dove sbaglio, le query sono corrette (solo che l'errore mi viene visualizzato nell'HTML)

    <asp:Repeater id="repArticoli" runat="server" DataSource='<%# GetProdotti(Convert.ToString(DataBinder.Eval(Conta iner.DataItem, "Cod"))) %>'>

    Compilation Error
    Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately.

    Compiler Error Message: CS0030: Cannot convert type 'void' to 'object'

    Source Error:



    Line 16: <ItemTemplate>
    Line 17:

    <%# DataBinder.Eval(Container.DataItem, "Descrizione") %></p>
    Line 18: <asp:Repeater id="repArticoli" runat="server" DataSource='<%# GetProdotti(Convert.ToString(DataBinder.Eval(Conta iner.DataItem, "Cod"))) %>'>
    Line 19: <ItemTemplate>
    Line 20:






    public void GetProdotti(string categoria)
    {

    string query = "SELECT * FROM Prodotti WHERE IDSottocategoria='" + categoria.ToString() + "'";

    try
    {
    DsDati = new DataSet();

    String SQLProdotti = query;
    OleDbDataAdapter myCommandProdotti = new OleDbDataAdapter(SQLProdotti,myConnection);
    myCommandProdotti.SelectCommand.CommandType=Comman dType.Text;
    myCommandProdotti.Fill(DsDati, "Prodotti");

    myConnection.Close();

    }

    catch (Exception exc)
    {
    string debug = exc.Message;
    }


    }




    public DataView GetSottoCategorie()
    {

    DsDati = new DataSet();

    String SQLCat = "SELECT * FROM Sottocategorie WHERE IDCategoria='S'";
    OleDbDataAdapter myCommandCat = new OleDbDataAdapter(SQLCat,myConnection);
    myCommandCat.SelectCommand.CommandType=CommandType .Text;
    myCommandCat.Fill(DsDati, "Categorie");

    myConnection.Close();

    return DsDati.Tables["Categorie"].DefaultView;

    }

  10. #10
    Originariamente inviato da valeria75
    Io non capisco proprio dove sbaglio
    Compiler Error Message: CS0030: Cannot convert type 'void' to 'object'
    Quando usi una funzione devi definire il suo risultato se vuoi usarlo. Se una funzione non produce risultato allora la definisci "void". Nel caso specifico, la tua funzione GetProdotti (p.s. visto che restituisce articoli perche non la chiami GetArticoli?) e' definita erroneamente void anche se poi nel codice aspx cerchi di visualizzarne il risultato.
    Saluti a tutti
    Riccardo

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.