none
Controlli TextBox controllare se sono vuoti o nulli RRS feed

  • Domanda

  • Salve, scusate da subito per il mio italiano scritto, ma sono di madre lingua spagnola, anche se vivo in Italia dal 1999.

    Sono un debuttante di questo forum, ho appena concluso un corso di 30 ore come programmatore ASP.net (C#) presso un instituto autorizato della mia città.

    Sto cercando di mettere in pratica quello che mi è stato insegnato al corso.

    Nel markup di una pagina aspx ho previsto una serie controlli di tipo TextBox all'interno di controlli Panel, che vengono riempiti in automatico quando il corrispetivo campo del database sql server non è vuoto.

    Ho la necessità a questo punto di contare i controlli TexBox validi all'interno del Panel Datigenerali, cioè quelli che contengono un valore.

    Ecco cosa ho inserito nel code behind del mio progetto :

                
                int CountDatigenerali = 0;
                foreach (Control ctr in Datigenerali.Controls)
                {
                    TextBox t = ctr as TextBox;
                    if (t != null)
                        CountDatigenerali++;
                }
    
                Response.Write("Totale Controlli Validi: " +      CountDatigenerali);

    La variabile di uscita CountDatigenerali però restituce sempre il totale dei controlli TextBox anche contando quelli che risultano essere vuoti nel database ed anche nella pagina aspx aperta nel browser.

    Forse non è possibile eseguire questa verifica su un controllo ?

    Vi ringrazio per la collaborazione.

    Miguel


    mercoledì 16 settembre 2015 13:21

Risposte

  • Ho corretto il ciclo, ma in uscita la variabile CountDatigenerali è sbagliata, indica sempre 0.

    I controlli TextBox nel controllo Panel sono 16 in totale di cui 10 sono quelli che contengono un valore.

    Mi aspetto che la variabile CountDatigenerali sia valorizata a 10, invece è 0 ...

    Grazie nuovamente-

                int CountDatigenerali = 0;
                foreach (Control ctr in Datigenerali.Controls)
                {
                    if (ctr is TextBox)
                    {
                        if (((TextBox)ctr).Text != String.Empty)
                            CountDatigenerali++;
                    }
                }
                Response.Write("Totale Controlli Validi: " + CountDatigenerali);

    • Contrassegnato come risposta Miguel1971 mercoledì 16 settembre 2015 14:31
    mercoledì 16 settembre 2015 14:13

Tutte le risposte

  • Buon pomeriggio Miguel e benvenuto nel forum!
    La condizione (f != null) è sempre vera perché i controlli TextBox essendo presenti nella pagina non sono di fatto "nulli".
    Lei invece ha bisogno di sapere solo quando la proprietà Text è null, infatti la ottieni così:

    if (t.Text != null)
    Saluti!



    Paolo Pranzo

    mercoledì 16 settembre 2015 13:40
  • Ciao Paolo, grazie per il benvenuto ed anche la risposta.

    Ho provato il tuo suggerimento, ma ho un "errore catastrofico" ....

                int CountDatigenerali = 0;
    
                foreach (Control ctr in Datigenerali.Controls)
                {
                    TextBox t = ctr as TextBox;
    
                    if (t.Text != null)
                        CountDatigenerali++;
                }          
    
                Response.Write("Totale Controlli Validi: " + CountDatigenerali);

    Errore sulla riga della condizione If :

    Object reference not set to an instance of an object. 
    
    :(

    mercoledì 16 settembre 2015 13:48
  • Ecco il ciclo corretto:
    int CountDatigenerali = 0;
    
            foreach (Control ctr in Datigenerali.Controls)
            {
                if (ctr is TextBox)
                {
                    if (((TextBox)ctr).Text != String.Empty)
                        CountDatigenerali++;
                }            
            }
    
            Response.Write("Totale Controlli Validi: " + CountDatigenerali);
    Ho controllato che la proprietà Text non sia vuota (tramite String.Empty) perché non può essere mai di tipo null.

    Ciao

    Paolo Pranzo

    mercoledì 16 settembre 2015 14:05
  • Ho corretto il ciclo, ma in uscita la variabile CountDatigenerali è sbagliata, indica sempre 0.

    I controlli TextBox nel controllo Panel sono 16 in totale di cui 10 sono quelli che contengono un valore.

    Mi aspetto che la variabile CountDatigenerali sia valorizata a 10, invece è 0 ...

    Grazie nuovamente-

                int CountDatigenerali = 0;
                foreach (Control ctr in Datigenerali.Controls)
                {
                    if (ctr is TextBox)
                    {
                        if (((TextBox)ctr).Text != String.Empty)
                            CountDatigenerali++;
                    }
                }
                Response.Write("Totale Controlli Validi: " + CountDatigenerali);

    • Contrassegnato come risposta Miguel1971 mercoledì 16 settembre 2015 14:31
    mercoledì 16 settembre 2015 14:13
  • Strano,
    può darsi che il ciclo venga eseguito prima che i vari controlli TextBox siano popolati dal DB.
    Assicurati di popolare prima i vari controlli e poi effettuare il ciclo.
    Al limite puoi fare una prova eseguendo il ciclo all'evento click di un button, così in questo modo il ciclo
    viene eseguito con i textbox popolati.

    Ciao

    Paolo Pranzo

    mercoledì 16 settembre 2015 14:18
  • Scusa Paolo, hai proprio ragione tu !

    Il ciclo era posizionato nel posto sbagliato, mi sono aiutato con il debug ed ho capito l'errore.

    Adesso la variabile CountDatigenerali è valorizata corretamente a 10.

    Si vede che sono un principiante ...

    Grazie infinite ed alla prossima discussione !!!

    Saludos!

    Miguel

    mercoledì 16 settembre 2015 14:21
  • Sono contento per averti aiutato!
    Buon codice, alla prossima!

    Ciao

    Paolo Pranzo

    mercoledì 16 settembre 2015 14:23