Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Elaborare dati prima di visualizzarli in un repeater

    Scusate la banalità della domanda che sto per porvi ma... sono un neo neofita di asp.net, sto studiando da un manuale e cerco e esempi ovunque ma questo passaggio proprio mi sfugge.

    Provengo da classic asp e la difficoltà più grande è il cambio di "mentalità" :s
    Veniamo al quesito:

    Io riesco ad estrarre i dati da un db mysql, utilizzando questo code behind:

    codice:
        
        Sub Page_Load(sender As Object, e As EventArgs)
    
        Dim cn As System.Data.Odbc.OdbcConnection = Nothing
        Dim cmd As System.Data.Odbc.OdbcCommand = Nothing
        Dim dr As System.Data.Odbc.OdbcDataReader = Nothing
    
        Dim ConnectionString As String = Application("dns")
    
        cn = New System.Data.Odbc.OdbcConnection(ConnectionString)
        cn.Open()
    
        cmd = New System.Data.Odbc.OdbcCommand("SELECT nome_rub FROM " & Application("predb") & "rubriche", cn)
            dr = cmd.ExecuteReader()
    
            Repeater1.DataSource() = dr
            Repeater1.DataBind()
    
            dr.Close() 
            cn.Close()  
    
        End Sub
    E a visualizzarli dentro un repeater:

    codice:
    <asp:repeater runat="server" ID="Repeater1">
            <ItemTemplate>
                <asp:Label id="RatingLabel" runat="server">
               <%# Container.DataItem("nome_rub")%>
                </asp:Label>
            </ItemTemplate>
            <SeparatorTemplate>
    </SeparatorTemplate>
        </asp:repeater>
    E fin qui tutto ok... ma se io volessi fare delle operazioni sui records estratti dal db prima di visualizzarli nel repeater, come faccio? Dove devo intercettarli? Prima del databind? E, scusate la banalità... una volta che eseguo le operazioni, come rieffettuo il databind? Sono confuso...
    Ciao,
    Danilo

  2. #2
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    La domanda mi pare un po' generica.
    Se provi a fare una domanda più semplice, magari dicendo cosa avresti fatto in asp, forse si riesce a tradurlo in aspx.

    ps. che operazioni devi fare sui record prima di visualizzarli?

    Pietro

  3. #3
    Grazie Pietro per la risposta...

    supponiamo di dover eseguire, giusto a titolo di esempio, un replace sul valori presenti nei campi nome_rub e descr_rub della tabella nel mysql (anche se nel post precedente ho indicato solo il campo nome_rub).

    In asp, dopo aver estratto i valori, avrei fatto cosi:

    codice:
    '''tralascio il resto del codice
    
    nome_rub = rs("nome_rub")
    descr_rub = rs("descr_rub")
    
    nome_rub = replace(nome_rub,testo,testo1)
    descr_rub = replace(descr_rub,VbCrlf,"
    ")
    
    '''tutto il resto del codice
    Come si farebbe in asp.net ad eseguire l'operazione di replace prima di mostrare il valore nome_rub e descr_rub nel repeater?

    Non sò se sono stato chiaro...
    Ciao,
    Danilo

  4. #4
    Utente di HTML.it L'avatar di cassano
    Registrato dal
    Aug 2004
    Messaggi
    3,002
    Devi intercettare l'evento Databound.

  5. #5
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Sì, ci sono tanti modi. Uno è quello di sotto.

    Ho una tabella, table1, con i campi id, stringa, numero, data
    Il mio obiettivo è intercettare la lettera à del campo stringa e sostituirla con X

    pagina html
    codice:
    <%@ Page Language="VB" AutoEventWireup="false" CodeFile="a.aspx.vb" Inherits="prove_a" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
        <link href="../App_Themes/classico8/StyleSheet.css" rel="stylesheet" type="text/css" />
    </head>
    <body>
        <form id="form1" runat="server">
        <div class="professionale_2">
            <asp:Repeater ID="Repeater1" runat="server" EnableViewState="false">
                <HeaderTemplate>
                    <table>
                        <tr>
                            <th>id</th>
                            <th>stringa</th>
                            <th>numero</th>
                            <th>data</th>
                        </tr>
                </HeaderTemplate>
                <ItemTemplate>
                        <tr>
                            <td><%#Eval("id")%></td>
                            <td><%#Eval("stringa").ToString().Replace("à"c,"X"c)%></td>
                            <td><%#Eval("numero")%></td>
                            <td><%#Eval("data")%></td>
                        </tr>
                </ItemTemplate>
                <FooterTemplate>
                    </table>
                </FooterTemplate>
            </asp:Repeater>
        </div>
        </form>
    </body>
    </html>
    pagina vb
    codice:
    Option Strict On
    Imports o = MySql.Data.MySqlClient
    
    Partial Class prove_a
        Inherits System.Web.UI.Page
    
    
        Private stringaConnessione As String = "Server=localhost;Database=test;Uid=test;Pwd=0000;"
    
    
        Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
            If Not Me.IsPostBack Then
                BindData()
            End If
        End Sub
    
        Private Sub BindData()
            DataBind(Me.Repeater1, stringaConnessione, "select * from table1")
        End Sub
    
        '-----------------------------------------------------------------------
        'Fa il DataBind di un Repeater => da mettere in una libreria esterna
        '-----------------------------------------------------------------------
        Public Function DataBind(Ctrl As System.Web.UI.WebControls.Repeater, StringConnection As String, sql As String) As Boolean
            Dim Connessione As o.MySqlConnection = Nothing
            Dim Comando As o.MySqlCommand
            Dim Reader As o.MySqlDataReader = Nothing
    
            Try
                Connessione = New o.MySqlConnection(StringConnection)
                Connessione.Open()
                Comando = Connessione.CreateCommand()
    
                Comando.CommandText = sql
    
                Reader = Comando.ExecuteReader
    
                Ctrl.DataSource = Reader
                Ctrl.DataBind()
                DataBind = Reader.HasRows
    
            Catch ex As Exception
                Throw
    
            Finally
                Try
                    If Not (Reader Is Nothing) Then Reader.Close()
                Catch
    
                End Try
    
                If Not (Connessione Is Nothing) Then Connessione.Close()
                Ctrl.DataSource = Nothing
            End Try
    
        End Function
    
    End Class
    nota <%#Eval("stringa").ToString().Replace("à"c,"X"c) %> che fa quello che volevo.

    Naturalmente, se il campo non contiene nulla, va in errore. Prova se è così. Ci sono naturalmente modi per ovviare.


    C'è un altro modo, ma questo alla prossima (se interessa )

    NOTA l'istruzione Option Strict On in testa al codice vb: assolutamente necessaria.
    Pietro

  6. #6
    Originariamente inviato da cassano
    Devi intercettare l'evento Databound.
    Grazie Cassano per la risposta... mi faresti però degli esempi per capirci qualcosa?

    Naturalmente, se il campo non contiene nulla, va in errore. Prova se è così. Ci sono naturalmente modi per ovviare.

    C'è un altro modo, ma questo alla prossima (se interessa )
    Certo Pietro mi interessa tutto Soprattutto vorrei capire come eseguire questa operazione di replace nel code behind, magari come diceva Cassano, intercettando l'evento databound... oppure in altro modo. Mi fareste degli esempi?

    Grazie ad entrambi!
    Ciao,
    Danilo

  7. #7

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.