Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13

Discussione: listview e valori null

  1. #1

    listview e valori null

    Salve a tutti,

    ho una listview collegata a un database Access. è composta da una serie span che visualizzano il nome del campo e Label con il valore.

    Esempio:

    codice:
    <span id="campoX" class=... >CampoX:</span>
    
    <asp:Label runat="server" Text='<%# Eval("campoX") %>' />
    Io vorrei uno script C# che faccia questo:

    se "campoX" è NULL, allora lo <span id="campoX"> deve avere lo stile "display:none".

    In pratica se il campo è vuoto non deve essere visualizzato nemmeno il nome.

    Premesso che sono un po' ignorante di C#, come dovrei scriverlo questo script?

    Grazie in anticipo per eventuali aiuti,
    Marco

  2. #2
    non fai prima a NON leggere dal db i valori NULL?

  3. #3
    Ciao,
    grazie della risposta.

    Forse non mi sono spiegato bene: il campoX può avere sia valori null che dati. A me non interessano i valori del campo, quindi l'elemento asp:label.
    Quello che a me interessa è l'elemento span che lo precede, il cui stile deve cambiare in base al valore del campoX.

    CampoX = null
    span -> display: none

    CampoX non null
    span -> display: inline

    Come devo scrivere questo script (C#)?

    Grazie,
    M.

  4. #4
    Utente di HTML.it L'avatar di rsdpzed
    Registrato dal
    Aug 2001
    Messaggi
    764
    Per prima cosa lascia che sia asp.net a mettere gli stili e fai diventare quelle SPAN delle Label server side.

    Successivamente puoi memorizzare l'elenco dei campi da controllare con le relative etichette in una dictionary private nella pagina e poi enumerarla cosi:

    codice:
    private Dictionary<string, string> ElencoCampi = new Dictionary<string, string>
    {
      {"Nome", "LabelNome"},
      {"Cognome", "LabelCognome"}
    };
    
    protected void ListView1_ItemDataBound(object sender, ListViewItemEventArgs e)
        {
            if (e.Item.ItemType == ListViewItemType.DataItem)
            {
                Label label;
                object valore;
    
                System.Data.DataRowView rowView = e.Item.DataItem as System.Data.DataRowView;
    
                foreach(var campo in ElencoCampi)
                {
                    valore = rowView[campo.Key].ToString();
                    if (null == valore)
                    {
                        Label = (Label)e.Item.FindControl(campo.Value);
                        Label.Visible = false;
                    }
                }
            }
        }

  5. #5
    Ciao,

    grazie del tempo che hai perso a scrivere lo script.

    Ribadendo la ma ignoranza in C#, volevo chiarire alcuni punti:

    1)
    Per prima cosa lascia che sia asp.net a mettere gli stili e fai diventare quelle SPAN delle Label server side.
    Intendi <label runat=server for=...> o <asp:Label...>?


    2) L'unica cosa che devo modificare nello script sono i nomi di private Dictionary? Il resto dello script lo lascio intatto?

    3) Copio tutto lo script in un file *.cs e lo collego alla master page tramite l'attributo "codefile="? Oppure lo inserisco nella pagina racchiuso in un tag <script>?

  6. #6
    Utente di HTML.it L'avatar di rsdpzed
    Registrato dal
    Aug 2001
    Messaggi
    764
    1) asp:Label, la seconda
    2) si
    3) Se usi visual studio dovrebbe crearti gia il file .cs relativo alla pagina e collegarlo attraverso la direttiva @Page al file aspx.

  7. #7
    Ciao rsdpzed,

    ho provato ad adattare lo script che mi hai gentilmente postato, ma purtroppo non funziona.

    Il codefile è collegato alla master page, mentre la listview è sulla content page.

    Rispetto al tuo script ho sostituito la parola "campo" con il nome del campo del db.

    Ti faccio un piccolo riepilogo:

    Pagina aspx:
    codice:
    <asp:Label ID="labelautore2" runat="server" Text='Autore2:' />
    <asp:Label runat="server" Text='<%# Eval("autore2") %>' />

    CodeFile:
    codice:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    
    public partial class marmar : System.Web.UI.MasterPage
    {
        protected void Page_Load(object sender, EventArgs e)
        {
    
        }
    
    
        private Dictionary<string, string> ElencoCampi = new Dictionary<string, string>
    {
      {"autore2", "labelautore2"}
    };
    
        protected void ListView1_ItemDataBound(object sender, ListViewItemEventArgs e)
        {
            if (e.Item.ItemType == ListViewItemType.DataItem)
            {
                Label etichetta;
                object valore;
    
                System.Data.DataRowView rowView = e.Item.DataItem as System.Data.DataRowView;
    
                foreach (var autore2 in ElencoCampi)
                {
                    valore = rowView[autore2.Key].ToString();
                    if (null == valore)
                    {
                        etichetta = (Label)e.Item.FindControl(autore2.Value);
                        etichetta.Visible = false;
                    }
                }
            }
        }
    
    }
    Ogni tuo aiuto è ben accetto.

    Grazie,
    Marco

  8. #8
    continuo a suggerirti di collegare la lista a una vista anziché a una tabella, e vedrai che non dovrai impazzire. ovviamente la vista sarà del tipo

    SELECT colonne FROM tabella WHERE colonna NOT IS NULL


  9. #9
    Utente di HTML.it L'avatar di rsdpzed
    Registrato dal
    Aug 2001
    Messaggi
    764
    @optime. credo che lui non voglia filtrare quei record. Il record lo vuole solo che non vuole visualizzare i campi con valori null (e le relative etichette). o ho capito male io?

    @marmar. devi inserire il codice nel codefile della pagina non della master page.. e l'evento lo devi collegare alla listview con:

    <asp:Listview .... OnItemDataBound="ListView1_ItemDataBound">

  10. #10
    Esattamente: il record lo voglio, non voglio peró il campo null con relativa label.

    Quindi devo creare n code file per tutte le content page con listview.

    Tornando al tuo codice:
    Se io ho piu campi di cui voglio nascondere l'etichetta, devo ripetere:

    codice:
    foreach (var CAMPO in elencocampi)......
    Per ogni coppia campo-etichetta?

    Grazie ragazzi, spero di risolvere questo punto cruciale della progettazione.

    M.

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.