Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 30
  1. #1

    Id a contenuto dinamico

    Scorro un dataview con un ciclo "for ...", il contenuto dei campi del dataview mi permette di riempire una "<table>"; uno dei campi deve essere editato ed uso una "<textarea>". Il contenuto modificato deve aggiornare un file.
    Devo perciò scorrere i controlli "<textarea>", prelevarne il contenuto digitato e scriverlo nel file. In tale contesto, i controlli devono essere identificati con "id" differente; in particolare, durante il ciclo for, attribuisco a "id" il valore della chiave con la quale cercherò la riga del file da aggiornare.
    Il problema è che non riesco ad assegnare "id" dinamico ai controlli "<textarea>"; una cosa del tipo:

    <textarea id="miocontrollo_<%=miadataview[i]['miocampo']%>" .....runat=server></textarea>, dove "i" è la variabile incrementata dal ciclo "for". So che "<%=%>" non è permesso in tag con "runat=server".

    Come fare?

    In alternativa, potrei aggiornare direttamente dataview per scorrere questa ed aggiornare il file invece di scorrere i controlli "<textarea>" della pagina?
    Significherebbe legare i controlli di pagina al dataview. Come fare?

    Grazie.

  2. #2
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    se usi un datagrid (o gridview nel 2.0) è tutto molto piu' semplice...

  3. #3
    Grazie djciko.
    Ho provato oggetti DataList e Repeater. Il problema è che l'assegnazione dinamica non funziona proprio per l'attributo ID. Ho avuto anche messaggio di errore del tipo: "l'assegnazione a Id eve essere semplice, del tipo: <asp:button runat=server id='Button1'"...
    Saiindicarmi una strada per aggiornare quel file?

  4. #4
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    Originariamente inviato da mercuri2008
    Grazie djciko.
    Ho provato oggetti DataList e Repeater. Il problema è che l'assegnazione dinamica non funziona proprio per l'attributo ID. Ho avuto anche messaggio di errore del tipo: "l'assegnazione a Id eve essere semplice, del tipo: <asp:button runat=server id='Button1'"...
    Saiindicarmi una strada per aggiornare quel file?
    Non assegnare un ID diverso, non ce n'è bisogno.
    Nell'evento ItemDataBound puoi trovare la textarea (ad esempio "txtFile") così:

    VB
    codice:
        Private Sub nomeRepeater_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.RepeaterItemEventArgs) Handles nomeRepeater_ItemDataBound
            If e.Item.ItemType = ListItemType.AlternatingItem Or e.Item.ItemType = ListItemType.Item Then
                    Dim ta As New TextBox
                    ta = DirectCast(e.Item.FindControl("txtFile"), TextBox)
                    ' Poi qui con ta.text ottieni il testo digitato nella textarea ed aggiorni il file
            End If
        End Sub
    (ti consiglio inoltre di usare una <asp:textbox invece della vecchia textarea)

  5. #5
    Ti ringrazio, sei gentile. Cercherò di far tesoro dei tuoi consigli.
    E' che mi rendo conto che mi sto impicciando veramente tra lato client e lato server: per ogni soluzione che adotto esce fuori una incompatibilità verso l'uno o verso l'altro.
    Cercavo di differenziare l'ID poiché intendevo assegnarli la chiave della riga che devo aggiornare; insomma: piazzo sulla pagina tutte le righe che mi servono, identificandole con la chiave che leggo da daatabse; quando l'utente preme un button, scorro i controlli e con quelli editati vado a scrivere su file. il fatto è che nel code-behind non intercetto i controlli (le textarea).
    Ciao. Buone cose.

  6. #6
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    Ti sei complicato la vita

    Ti ripeto, usa un controllo di listing nativo del framework (datagrid, datalist, repeater), sono fatti apposta e semplificano tutto con i loro eventi (ovviamente con un pò di pratica).

    Mi sono reso conto però di averti detto una cosa errata, rileggendo ciò che devi fare.
    L'evento ItemDataBound è usato più che altro in creazione delle righe, per modificare i controlli riempendoli magari con cio' che prelevi dal DB.

    Per fare ciò che dici, alla pressione del bottone bt:

    codice:
        Private Sub bt_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles bt.Click
            For Each riga As RepeaterItem In nomeRepeater.Items
                Dim tb As New TextBox
                tb = DirectCast(riga.FindControl("txtFile"), TextBox)
                'tb.text etc
            Next
        End Sub
    Non c'è bisogno di differenziare l'ID perchè ogni RepeaterItem (cioè ogni riga) ha le sue istanze, per i controlli che contiene. La tecnica di assegnare l'ID da codice lato server è usata più che altro quando si crea tutto il controllo (la tua textarea) dinamicamente, ma non è il tuo caso.

    Prova

  7. #7
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Quello che tu chiedi si può fare in più modi, tutti validi. Io te ne illustro uno.

    Nella pagina, dove vuoi che compaia la tabella, metti un literal:

    codice:
    <asp:Literal ID="Literal1" runat="server" EnableViewState="false"></asp:Literal>
    NOTA: EnableViewState="false" da mettere sempre quando possibile


    Nell'evento load metti:

    codice:
        Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            If Not Me.IsPostBack Then
                BindData()
            End If
    
        End Sub
    e il metodo Binddata è:
    codice:
        Protected Sub BindData()
            Dim dv As DataView = msole.GetDataView(gl.StringaConnessioneTest, "select * from campi")
    
            Dim sb As New StringBuilder()
            sb.Append("<table>")
            sb.Append("<tr>")
            sb.Append("<td>id</td>")
            sb.Append("<td>memo</td>")
            sb.Append("</tr>")
    
            For i As Integer = 0 To dv.Count - 1
                sb.Append("<tr>")
                sb.Append(String.Format("<td>{0}</td>", dv(i)("id").ToString))
                sb.Append(String.Format("<td><textarea id=""TextArea_{0}"" name=""TextArea_{0}"" cols=""40"" rows=""4"">{1}</textarea></td>", l.NullToString(dv(i)("id")), l.NullToString(dv(i)("memo"))))
                sb.Append("</tr>")
            Next
    
    
    
            sb.Append("</table>")
    
            Me.Literal1.Text = sb.ToString
    
        End Sub
    Dim dv As DataView = msole.GetDataView(gl.StringaConnessioneTest, "select * from campi") ==> crea un DatView leggendo i dati da una tabella access, un id e un campo memo

    Dim sb As New StringBuilder() ==> definisce un buffer string; la sua manipolazione è molto veloce

    Il textarea ha (l'id non è indispensabile) un name composto da TextArea_ + l'ID del record


    alla fine, l'html composto lo metti nel literal
    Me.Literal1.Text = sb.ToString


    Per recuperare i dati, niente di più semplice. I dati vengono spediti via post, perciò basta ricordare che System.Web.HttpContext.Current.Request.Form.AllKey s contiene le chiavi ricevute.
    Perciò fai un ciclo, per ogni chiave nell'insieme chiavi {se chiave inizia per "TextArea_" etc. etc

    Non metto il codice ma non avrai difficoltà (spero)



    NOTA: nessuno dice che i controlli server non servano, anzi. Ma in alcuni scenari è impossibile utilizzarli ed è meglio fare le cose a mano. Per esempio, se volessi aggiungere una riga alla tabella, lato client, con javascript è semplicissimo. Recuperare i dati nel server si può fare però solo come ti ho mostrato perchè i cosidetti controlli server non vanno bene.

    Pietro

  8. #8
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    Originariamente inviato da pietro09
    Recuperare i dati nel server si può fare però solo come ti ho mostrato perchè i cosidetti controlli server non vanno bene
    :master:

    Bof, secondo me o si sposano le nuove opportunità che si hanno a disposizione oppure si rimane ancorati alle vecchie e bon. Cercare di forzare le prime verso le seconde non mi è mai piaciuto, a meno di esigenze particolari ...

    Poi ognuno ha il suo stile eh, niente da dire

  9. #9
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Originariamente inviato da djciko
    :master:

    Bof, secondo me o si sposano le nuove opportunità che si hanno a disposizione oppure si rimane ancorati alle vecchie e bon. Cercare di forzare le prime verso le seconde non mi è mai piaciuto, a meno di esigenze particolari ...

    Certo, ma siamo daccordo allora, prima si impara a fare di conto a mano, con le tabelline (te le ricordi ), poi si impara ad usare la calcolatrice
    Pietro

  10. #10
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    in realtà conosco il tuo stile, pietro. e lo apprezzo.

    ho postato una risposta più per provare Chrome che altro

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 © 2026 vBulletin Solutions, Inc. All rights reserved.