Visualizzazione dei risultati da 1 a 4 su 4

Hybrid View

  1. #1
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    fermat, quello che vuoi ottenere si puo' fare dal metodo ItemDataBound del Repeater.

    comunque, riguardo la sintassi su cui c'e' confusione, di seguito un esempio che funziona ("NOME_PRODOTTO" è una colonna di una tabella che viene letta e messa come datasource al Repeater nel Code-Behind).

    La funzione Choose fa una semplice cernita fra i valori che contengono la parola "lavatrice".

    Al placeholder che vedi, nell'evento ItemDataBound, viene aggiunto un controllo (IDPlaceholder.Controls.Add) a seconda di una logica custom, che puo' essere una qualsiasi.


    La pagina ASPX:
    codice:
    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="repeaterExample.aspx.cs" Inherits="repeaterExample" %>
    
    
    <!DOCTYPE html>
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title></title>
        <script runat="server">
            public string Choose(string x)
            {
                if (x.Contains("lavatrice"))
                    return x;
                else
                    return "non contiene la parola cercata";
            }
        </script>
    </head>
    <body>
        <form id="form1" runat="server">
            <div>
                <asp:Repeater ID="rpt" runat="server" OnItemDataBound="rpt_ItemDataBound">
                    <ItemTemplate>
                        <asp:Label ID="lb" 
                            Text='<%# Choose(DataBinder.Eval(Container.DataItem, "NOME_PRODOTTO").ToString()) %>' 
                            runat="server"></asp:Label>
                        
                        <asp:PlaceHolder ID="ph" runat="server"></asp:PlaceHolder>
                    </ItemTemplate>
                    <SeparatorTemplate><hr /><br /></SeparatorTemplate>
                </asp:Repeater>
            </div>
        </form>
    </body>
    </html>


    L'evento citato, nel Code-Behind:
    codice:
    protected void rpt_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {
            Label lb = new Label();
            lb = (Label)e.Item.FindControl("lb");
    
    
            if (lb.Text.Contains("lavatrice"))
            {
                // 
                // Aggiunta di un controllo di esempio al placeholder
                //
                System.Web.UI.HtmlControls.HtmlButton b = new System.Web.UI.HtmlControls.HtmlButton();
                b.ID = "bt";
                b.InnerText = "Bottone aggiunto da codice";
    
    
                PlaceHolder ph = new PlaceHolder();
                ph = (PlaceHolder)e.Item.FindControl("ph");
                ph.Controls.Add(b);
            }
        }
    }


    La cosa da tenere a mente, col secondo metodo, è ricreare i controlli creati a runtime, che non è cosa da poco quando sono tanti (e neanche quando non lo sono, a dire il vero). Prova, e ricorda di riprodurre gli stessi ID della prima creazione (qui vado a memoria).

    Effettivamente, su questo asp.net è un po' rognoso. Comunque la sintassi per togliere quell'errore è nel primo blocco di codice
    Ultima modifica di djciko; 28-11-2019 a 17:52

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.