404 messaggi dal 09 maggio 2012
Ciao ragazzi, devo creare una pagina che presenta un lista di prodotti in questa maniera:

CATEGORIA 1
- nome prodotto 1
- nome prodotto 2
- nome prodotto 3

CATEGORIA 2
- nome prodotto 1
- nome prodotto 2
- nome prodotto 3

ETC...

Il database è già sviluppato con 2 tabelle relazionate, categorie e prodotti. Dal pannello si possono aggiungere altre categorie e altri prodotti. Adesso, in che modo posso mostrare i prodotti in questo modo ?
se lavori in web form, con 2 repeater innestati. in mvc con due foreach

Ormai programmano tutti... ma la professionalità appartiene a pochi
404 messaggi dal 09 maggio 2012
beh si ho dato uno sguardo in giro ma non mi è molto chiaro come utilizzare i 2 repeater innestati. Questo è il codice parziale che ho.

<asp:Repeater ID="repeater1" runat="server" DataSourceID="datasource1">

    <ItemTemplate>
      <div class="titolo"><h2 class="upper"><%# Eval("categoria")%></h2></div>
       <asp:Repeater ID="repeater2" runat="server" DataSourceID="datasource2">
         <ItemTemplate>
            <p><%# Eval("nome")%></p>
         </itemTemplate>
       </asp:Repeater>
    </ItemTemplate>

   </asp:Repeater>


Innanzitutto volevo sapere se l'unico modo per presentare questo elenco fosse solo lavorando sul code behind. In secondo luogo quali sino gli steps per lavorare sul codebehind? in particolare come faccio a "dire" al secondo repeater di presentare i prodotti della categoria corrente ?
209 messaggi dal 09 ottobre 2006
Ciao a tutti,
io ho realizzato una pagine del genere usando due controlli DataList.
Li ho popolati da codice, il primo (categorie) in un metodo, l'altro (le subcategorie) nell'OnItemDataBound del primo.

Scrivo un po di codice:

questo è il primo metodo

SqlConnection Conn = new SqlConnection();
SqlCommand Cmd = new SqlCommand("SELECT * FROM categorie ORDER BY nomecat", Conn);
Conn.ConnectionString = strConnString;
Conn.Open();
SqlDataReader SqlReader = Cmd.ExecuteReader();
GridCategorie.DataSource = SqlReader;
GridCategorie.DataBind();
Conn.Close();

e nella pagina
<asp:DataList ID="GridCategorie" runat="server" RepeatColumns="2" OnItemDataBound="Item_Bound">
<ItemTemplate>
<asp:Label ID="Label2" runat="server" CssClass="CampoTabella" Font-Bold=true Text='<%# DataBinder.Eval(Container.DataItem, "nomecat") %>' />
<br/>
<asp:Label ID="Label2" runat="server" CssClass="CampoTabella" Font-Bold=true Text='<%# DataBinder.Eval(Container.DataItem, "nomesubcat") %>' />

</ItemTemplate>
</asp:DataList>

nell'OnItemDataBound
if (e.Item.ItemType == ListItemType.Item ||
e.Item.ItemType == ListItemType.AlternatingItem)
{

System.Data.Common.DbDataRecord rd = (System.Data.Common.DbDataRecord)e.Item.DataItem;

string mia = rd["idcat"].ToString();

//carico subcat
string strConnString = ConfigurationManager.ConnectionStrings["GaleoCS"].ConnectionString;
DataList SubCat = (DataList)e.Item.FindControl("GridSubCategorie");
SqlConnection Conn = new SqlConnection();
SqlCommand Cmd = new SqlCommand("SELECT [nomesubcat], categorie.[nomecat] FROM subcat INNER JOIN categorie ON subcat.CatId = categorie.idcat WHERE CatId=" + mia, Conn);
Conn.ConnectionString = strConnString;
Conn.Open();
SqlDataReader SqlReader = Cmd.ExecuteReader();
SubCat.DataSource = SqlReader;
SubCat.DataBind();
Conn.Close();

}


Magari non è il massimo, però funziona! ;-)

Spero di averti aiutato, ciao

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.