23 messaggi dal 23 giugno 2007
www.liquidfly.it
Ciao a tutti,
vi espongo la mia richiesta in quanto sono in cerca di consiglio su come fare un ottimo lavoro.

Sto costruendo una pagina che si occupa di visualizzare delle news.

Questa pagina, contenuta in una masterpage, è divisa in 2 parti, una che ha la lista delle news disponibili in formato anteprima,
l'altra visualizza l'intera news.
L'anteprima delle news ha due stati, uno "chiuso" (per tutte le news tranne quella in lettura) ed uno stato "aperto" (solo la news in lettura)
Ovviamente il numero delle news ed il loro contenuto è variabile...
Tecnicamente già tutto funziona ma devo inserire la tecnologia ajax per non ricaricare tutta la pagina ogni volta,
e la tecnologia jquery per animare lo stato delle anteprime.

Quello che deve accadere è che se ho 5 news in cui la N°3 aperta, nella lista di anteprime la N°3 avrà lo stato aperto, ovvero un layout più alto (height) e un conenuto strutturato diversamente.
Nella parte di visualizzazione è presente la news N° 3.
Quando l'utente clicca nella zona anteprima sulla news 2, vedrà cambiare il contenuto nella zona visualizzazione, mentre nella lista anteprima quella che prima era visualizzata dovrà cambiare il suo layout in "chiuso" e la 3 lo cambierà in aperto.

I miei dubbi principali sono due :
1) non ho ben chiaro come legare gli N "trigger" nelle anteprime per far cambiare il contenuto al "upadatepanel" della visualizzazione in quanto queste sono create dinamicamente da codice.

2) non so come variare la visualizzazione delle news nella sezione anteprime, sfruttando jquery per dargli una fluidità nel cambio di stato.

Per il punto 2 ho qualche idea in merito andando a scrivere condice javascript nell'html che costruisco lato server ma non so se è il modo giusto di lavorare.

Sperando di essermi spiegato in modo comprensibile, vi chiedo consiglio in merito.

Grazie

Luca
843 messaggi dal 08 aprile 2009
Io ho fatto così:
http://www.vispesaro1898.com/ArchivioNews.aspx?IDNews=334
...
se ti interessa ti dico come ho fatto.
23 messaggi dal 23 giugno 2007
www.liquidfly.it
Direi che tecnicamente, la parte ajax è proprio quello che voglio fare anche se il materiale da gestire sarà "più pesante" ma quello che mi hai presentato credo risolva la maggior parte dei problemi.
Come hai fatto?
Grazie molte.
843 messaggi dal 08 aprile 2009
Parte Grafica:
Ho un UpdatePanel (lo chiamo UpdatePanelFormNews) sulla sinistra del form. In questo Update ho inserito un asp:FormView: all'interno potete mettere nel ItemTemplate i campi che volete, label, textbox, ecc...
Questo mi serve per visualizzare il dettaglio della news.

Ho un'altro UpdatePanel (lo chiamo UpdatePanelListNews) sulla destra del form.
In questo Update ho inserito un asp:GridView. Ho impostato una sola colonna con il TemplateField e all'interno ho messo una label nascosta con l'id della news, due link button, uno per la categoria e l'altro per la data.

Codice:
1) intercetto l'evento RowCreated del gridview (lista delle news) e per ogni riga aggancio l'evento onmouseover e onmouseout javascript:

 protected void ListNews_RowCreated(object sender, GridViewRowEventArgs e)
    {
        string rowID = String.Empty;
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            rowID = "row" + e.Row.RowIndex;
            e.Row.Attributes.Add("id", "row" + e.Row.RowIndex); 
            e.Row.Attributes.Add("onmouseover", "SelectRowOver(" + "'" + rowID + "'" + ")");
            e.Row.Attributes.Add("onmouseout", "UnSelectRowOver(" + "'" + rowID + "'" + ")");

        }
    }

<script language="javascript" type="text/javascript">


    function SelectRowOver(rowID) {
        if (document.getElementById(rowID).className != 'selectedgridrowstyleListNews') {
            document.getElementById(rowID).className = 'selectedgridrowstyleListNewsOnMouseOver';
        }
    }

    function UnSelectRowOver(rowID) {

        if (document.getElementById(rowID).className != 'selectedgridrowstyleListNews') {
            document.getElementById(rowID).className = 'gridrowstyleListNews';
        }
    }

    

</script>


2)Implemento il RowCommand del gridview (Lista delle News). Recupero la label nascosta che contiene l'id della news e carico la news nel FormView
    protected void ListNews_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        int IDNews = 0;
        try
        {
            IDNews = Convert.ToInt16(e.CommandArgument);
        }
        catch
        {
            return;
        }
        string carica = CaricaNewsForm(IDNews);

        int row = 0;
        for (int i = 0; i < ListNews.Rows.Count; i++)
        {
            string id = ((Label)ListNews.Rows[i].FindControl("id_news")).Text;
            if ( Convert.ToInt16(id) == IDNews)
            {
                row = i;
                break;
            }
        }

        GridViewRow Riga = ListNews.Rows[row];
        Riga.CssClass = "selectedgridrowstyleListNews";

        
  
    }


3)Nella PageLoad se non sei in postBack carico La lista delle news. Se il query string contiene un id della news(vengo dalla homepage) carico quella altrimenti carico la prima della lista.

Poi io ho implementato tutta la parte di pagina avanti e indietro sia della lista che della form view a mano.

Sostanzialmente non faccio nulla di particolare solo che approfitto dell'update panel per non far ricaricare tutta la pagina. Qui non c'è jquery ma potrebbe essere implementato....molto semplicemente.
23 messaggi dal 23 giugno 2007
www.liquidfly.it
Grazie d'aver illustrato il metodo che hai usato, ma non mi è chiaro con quali "Trigger" comunicano i due updatepanel. Mi spiego meglio :
Per ogni news che inserisci nella lista, immagino che la agganci come trigger all'updatepanel in cui visulizzi la news per far in modo che al clik in uno degli N link della lista, venga eseguito l'update del panel in cui visulizzi la news. Giusto?
Il mio problema è che vorrei mettere come trigger il div che contiene la news nello stato chiuso, ma essendo che questo div non ha l'evento click se non da javascript, non so come fare da js a chiamare la mia funzione lato server che faccia l'update del mio panel.
Forse nel tuo esempio hai trovato vantaggio usando il GridView e formview, mentre nel mio caso sono tutti Div, o forse mi sto complicando la vita?
843 messaggi dal 08 aprile 2009
Secondo me ti stai complicando la vita.
Utilizzando gli updatepanel gli eventi ajax vengono collegati da soli.
Gli oggetti che ti servono sono:
1. script manager:
    <asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>


2. update panel lista news con gridview all'interno:
<asp:UpdatePanel ID="UpdatePanelListNews" runat="server">
     <ContentTemplate>
    <asp:GridView ID="ListNews" runat="server"
        AutoGenerateColumns="False" 
        CssClass="gridListNews" GridLines="None" 
        ShowFooter="False" ShowHeader="false"  AllowPaging="true" PageSize="4" 
            onpageindexchanging="ListNews_PageIndexChanging" 
             onrowcreated="ListNews_RowCreated" onrowcommand="ListNews_RowCommand" 
             onselectedindexchanged="ListNews_SelectedIndexChanged" >
        <FooterStyle CssClass="gridfooter" Height="25px" />
        <RowStyle CssClass="gridrowstyleListNews"   />
        <SelectedRowStyle CssClass="selectedgridrowstyleListNews" />


        <Columns>
            
             <asp:TemplateField  ItemStyle-CssClass="Padding10" >
                <ItemTemplate>
                   
                
                  <asp:Label ID="id_news" Visible="false" CssClass="DataNewsLista" runat="server" Text='<%# Bind("id_news") %>' ></asp:Label>
                 <asp:LinkButton  ID="Categoria" CssClass="CategoriaNewsLista" runat="server" Text='<%# Bind("CATEGORIA") %>'  CommandArgument='<%# Bind("id_news") %>'></asp:LinkButton><br />
                
                 <br />
                 <br />
                  <asp:LinkButton ID="DataNews" CssClass="DataNewsLista" runat="server" Text='<%# Bind("DATA") %>'  CommandArgument='<%# Bind("id_news") %>'></asp:LinkButton>
                 
                 
            <br />
            <asp:LinkButton ID="Titolo"  runat="server" CssClass="TitoloNewsLista" 
                Text='<%# Bind("titolo")  %>' CommandArgument='<%# Bind("id_news") %>' ></asp:LinkButton></ItemTemplate><ItemStyle CssClass="gridrowstyleListNews" />
              
            </asp:TemplateField>
        </Columns>
        
         <PagerSettings  
       Mode="NextPrevious"
       NextPageText="Continua >>" PreviousPageText="Indietro <<" 
       Position="Bottom"  />
       <PagerStyle HorizontalAlign="Right"   />
       
    </asp:GridView>
         </ContentTemplate>
     </asp:UpdatePanel>

3. un updatepanel con il formview e un updateprogress per visualizzare il loading con la gif:
<asp:UpdatePanel ID="UpdatePanelFormsNews" runat="server">
     <ContentTemplate>
         <asp:UpdateProgress ID="UpdateProgressFormsNews" runat="server">
         <ProgressTemplate>
              <DIV id="IMGDIV" 
              align="center" 
              valign="middle" runat="server" 
              style="position: absolute;left: 20%; top: 80%; visibility:visible;vertical-align:middle;border-style:inset;border-color:black;background-color:White">
                <img src="files/roller.gif" />Attendere prego...
            </div>
         </ProgressTemplate>
         </asp:UpdateProgress>
        <asp:FormView ID="FormNews" runat="server" AllowPaging="True" runat="server" 
            onpageindexchanging="FormNews_PageIndexChanging" BorderStyle="None" 
            Width="400px" Height="273px"  >
        <ItemTemplate>
        <asp:Label ID="id_news" Visible="false" runat="server" Text='<%# Bind("id_news") %>' ></asp:Label>
            <asp:Label ID="Titolo"  runat="server" CssClass="TitoloNews" 
                Text='<%# Bind("titolo") %>'></asp:Label>
        
            <br />
            <br />
            <br />
            <asp:Label ID="Testo" runat="server"   CssClass="TestoNews"
                Text='<%# Bind("TESTO_C") %>'></asp:Label>
        
            <br />
        
        </ItemTemplate>
        
       <PagerSettings 
       Mode="NextPrevious"
       NextPageText="Continua >>" PreviousPageText="Indietro <<" 
       Position="Bottom" />
       <PagerStyle HorizontalAlign="Right" />
        </asp:FormView>
        </ContentTemplate>
        </asp:UpdatePanel>


se vuoi dare l'effetto con jquery nel formview inserisci un div con i dati dentro e con l'id gestisci il fade.
23 messaggi dal 23 giugno 2007
www.liquidfly.it
Sei molto gentile a darmi tutte queste informazioni, ora sta a me adattarle alla mia esigenza, ma dentro ad ogni singola cella posso inserire tutto il mio codice html in modo dinamico ed in un secondo momento animarlo con jquery? Tutto questo lo intendo all'interno della singola cella della gridview.

Tieni presente che ogni cella è un po' come se fosse una piccola paginetta html.

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.