19 messaggi dal 02 febbraio 2006
Ciao a tutti. Dunque sto lentamente imparando l'ASP.NET :)
Ho l'esigenza di visualizzare il contenuto di un datareader. Questo dataReader mi dovrebbe visualizzare delle righe tipo tabella, ma formattandole condizionalmente (esempio se un prodotto è nascosto, visualizzarlo con testo grigio piuttosto che con testo nero... in generale basterebbe cambiare il CSS della riga).

Quale componente mi consigliate di utilizzare?
Io ho gia provato con un ListView ma la gestione dei CSS sugli item non è di facile gestione...

Grazie a tutti della disponibilità!
3.939 messaggi dal 28 gennaio 2003
Perchè usare componenti, se non servono?
Io proverei a fare la scansione del DataReader costruendo l'html con un StringBuilder.

Se si dovessero usare componenti, il ListView mi pare il più adatto. Nel tuo caso credo si debba andare nell'evento ItemDataBound
19 messaggi dal 02 febbraio 2006
Ciao Pietro, grazie per la risposta!
Ho gia provato a gestire l'ItemDataBound ma l'item della listview non ha un campo come cssClass, e nemmeno ForeColor o BackColor... quindi ciccia!
L'unica cosa che posso fare nel definire il colore del background è di usare il tag AlternatingItemTemplate in fase di definizione del controllo, per fare in modo che mi alterni i CSS in base al numero di riga.

Quindi mi consigli uno stringBuilder?
Ho cercato su google ed ho capito come si usa... ora provo a implementarlo.

Grazie per la dritta :)
Chiedo ancora scusa per la basilarità della domanda, ma essendo nuovo in ASP.NET non sapevo manco dell'esistenza di uno StringBuilder :)

Grazie ancora
Buona giornata!

Sk
3.939 messaggi dal 28 gennaio 2003
Nel ListView, nell'ItemTemplate, dai un id alla riga

<tr runat="server" id="riga">


Nell'evento ItemDataBound fai

Protected Sub ListView1_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.ListViewItemEventArgs) Handles ListView1.ItemDataBound
  Dim lw As ListView = DirectCast(sender, ListView)
  Dim li As ListViewItem = e.Item

  If li.ItemType = ListViewItemType.DataItem Then
    Dim di As ListViewDataItem = DirectCast(li, ListViewDataItem)

    'seleziono le righe che hanno il campo [testo] = "pietro"
    Dim r As System.Data.Common.DbDataRecord = DirectCast(di.DataItem, System.Data.Common.DbDataRecord)
    Dim tr As System.Web.UI.HtmlControls.HtmlTableRow = DirectCast(li.FindControl("riga"), System.Web.UI.HtmlControls.HtmlTableRow)
    If tr IsNot Nothing Then
      If l.NullToString(r("testo")).ToLower = "pietro" Then
        tr.Style.Add("background-color", "#F2BF63")
        tr.Style.Add("color", "#E0E0E0")
      End If

      'onmouseout-onmouseover
      Dim color_background_old As String = tr.Style("background-color")

      tr.Attributes.Add("onmouseover", "this.style.backgroundColor = 'Silver'")
      tr.Attributes.Add("onmouseout", String.Format("this.style.backgroundColor = '{0}'", color_background_old))

    End If
    
    ***


Potrebbero esserci problemi nel cast del DataItem

se i dati derivano da Reader -> System.Data.Common.DbDataRecord
se derivano da DataTable -> System.Data.DataRow
se derivano da DataView -> System.Data.DataRowView


Se vuoi fare tutto a mano (è la soluzione più veloce) metti un controllo Literal dove vuoi che compaia la tabella. Scrivi l'html usando un stringBuilder (non una stringa mi raccomando) e poi fai: Me.Literal1.Text = stringbuilder1.ToString
19 messaggi dal 02 febbraio 2006
Ma di dove sei che una birra te la devo offrire?!
Grazie milleeeeeeeeeeeeee!!!! :)

Appena posso provo tutto quanto e poi ti faccio sapere! ;)

Tra l'altro leggendo il tuo codice mi sono spazzato via un po' di dubbi che avevo... la comprensione di questo nuovo mondo si fa sempre piu vicina! :D
Ho programmato per anni in ASP e questo .NET mi ha trovato un po' spiazzato... ma piano piano... :)

Ancora grazie!
Ciaoooooooooooooooooo!!!
19 messaggi dal 02 febbraio 2006
Ciao! Al momento sono riuscito a provare solo il metodo listview!
MA ho ancora un problemino...
Incollo il codice e poi spiego:
    Protected Sub ProductsListView_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.ListViewItemEventArgs) Handles ProductsListView.ItemDataBound
        Dim lw As ListView = DirectCast(sender, ListView)
        Dim li As ListViewItem = e.Item

        If li.ItemType = ListViewItemType.DataItem Then
            Dim di As ListViewDataItem = DirectCast(li, ListViewDataItem)
            Dim MyData As System.Data.Common.DbDataRecord = DirectCast(di.DataItem, System.Data.Common.DbDataRecord)
            If MyData("Visibile") = False Then
                Dim ctrl As String = CStr(MyData("idProdotto"))
                Dim tr As System.Web.UI.HtmlControls.HtmlTableRow = DirectCast(li.FindControl(ctrl), System.Web.UI.HtmlControls.HtmlTableRow)
                If tr IsNot Nothing Then
                    tr.Style.Add("Color", "#8b8b8b")
                End If
            End If
        End If
End Sub



Ho in sostanza preso il codice postato e l'ho riadattato alla mia situazione...
Ho solo un problema: Quando faccio il DirectCast per cercare la riga della tabella (a cui viene assegnato correttamente un ID="idprodotto") mi restituisce come valore di tr "NOTHING"... quindi non mi cambia mai il colore delle scritte...

Qualche idea?
3.939 messaggi dal 28 gennaio 2003
Premetto che questo codice l'ho copito e incollato da un mio esercizio funzionante.
Detto questo, se come è giusto, metto in testa al codice

Option Strict On

non dovrebbe funzionare

If MyData("Visibile") = False

ma si dovrebbe prima convertire MyData("Visibile") a boolean.

Inoltre, io ho nominato la riga con un id univoco

<tr runat="server" id="riga">

perciò cerco sempre la riga di id="riga"

FindControl("riga") e non FindControl(ctrl) che non troverò di certo.

Insomma, il codice non è da copiare ma da adattare, da adattare bene però
19 messaggi dal 02 febbraio 2006
Ciao pietro, grazie della risposta... ma non so se ho capito bene bene... dunque...


Detto questo, se come è giusto, metto in testa al codice

Option Strict On

non dovrebbe funzionare

If MyData("Visibile") = False

ma si dovrebbe prima convertire MyData("Visibile") a boolean.

Uhm... MyData("Visibile"), se non ho capito male, è il campo che viene direttametne preso dal mio DataReader... giusto? In questo caso è gia un campo boolean...


Inoltre, io ho nominato la riga con un id univoco

<tr runat="server" id="riga">

perciò cerco sempre la riga di id="riga"

FindControl("riga") e non FindControl(ctrl) che non troverò di certo.


Okay... ma io ho fatto in modo che sia:
<tr runat="server" id="<%#Eval("idProdotto")%>">

cosicche dovrei riuscire a trovarlo (infatti se vado a vedere il mio codice sorgente mi restituisce i giusti valori (id="12345" e cosi via)


Insomma, il codice non è da copiare ma da adattare, da adattare bene però

...era quello che pensavo di aver fatto
ma sono un niubbo quindi mai esserne certi

Come sempre grazie della disponibilità! :)

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.