IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

pourquoi le programme ne s'arrête-t-il pas?


Sujet :

C#

  1. #1
    Membre confirmé
    Homme Profil pro
    Analyse système
    Inscrit en
    Février 2021
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2021
    Messages : 77
    Par défaut pourquoi le programme ne s'arrête-t-il pas?
    Bonjour

    Quand je laisse le champ 'begdat' (d'un gridview en mode edit) vide ou tout sauf une date valide, j'ai l'erreur "Not a date 1" et le programme stoppe et je dois rentrer une date valide. Le message "Not a date 2." n'apparaît pas de la ligne 16.

    Mais si j'enlève les lignes 13 à 17 en quittant le champ 'begdat' vide ou avec n'importe quoi alors je n'ai plus le message "Not a date 1" mais bien à la ligne 18 le message
    String was not recognized as a valid DateTime
    Vu que les conditions sont remplies pour activer la ligne 4 (champ vide ou tout sauf une date valide), pourquoi ne le fait-il pas et continue-t-il jusqu'au bout?
    Y-a-t-il une priorité entre le code serveur et le code client?
    Merci

    Voici le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    protected void GridView1_RowUpdating(object sender, System.Web.UI.WebControls.GridViewUpdateEventArgs e)  
        GridViewRow row = (GridViewRow)GridView1.Rows[e.RowIndex];  
        TextBox begdattxt = (TextBox)row.FindControl("begdat");  
        if (!DateTime.TryParse(begdattxt.Text,out newDate))  
        {  
            e.Cancel = true;  
            ClientScript.RegisterClientScriptBlock(this.GetType(), "myscript", " alert('Not a date 1.');", true);
        }  
        else  
        {  
            begdat = Convert.ToDateTime(e.NewValues["begdat"]);  
        }
     
        if (!DateTime.TryParse(begdattxt.Text, out newDate) || !DateTime.TryParse(enddattxt.Text, out newDate))  
        {  
            e.Cancel = true;  
            ClientScript.RegisterClientScriptBlock(this.GetType(), "myscript", " alert('Not a date 2.');", true);
        } 
     
        else if (Convert.ToDateTime(enddattxt.Text) < Convert.ToDateTime(begdattxt.Text))  
        {  
            e.Cancel = true;  
            Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "myscript", " alert('endate must be >= begindate.');", true);  
            enddattxt.Focus();  
        }
    }

  2. #2
    Expert confirmé

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 761
    Billets dans le blog
    21
    Par défaut
    Cela fait bien longtemps que je n'ai pas fait d'ASP, mais il me semble que le nom myscript au niveau de ClientScript.RegisterClientScriptBlock doit être unique. En cas de doublon, les deux scripts ne sont pas enregistrés et envoyés au client. Seulement un seul.

  3. #3
    Membre confirmé
    Homme Profil pro
    Analyse système
    Inscrit en
    Février 2021
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2021
    Messages : 77
    Par défaut
    Bonjour

    Vous avez raison en cas de doublon,

    je viens de changer la ligne 23
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "myscript", " alert('endate must be >= begindate.');", true)
    en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "myscript2", " alert('endate must be >= begindate.');", true)
    Dans le cas où les lignes 14 à 18 n'existent pas (et on retire le 'else' de la ligne 20), il n'y a plus de doublons et pourtant, j'obtiens le même résultat :
    String was not recognized as a valid DateTime

  4. #4
    Expert confirmé

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 761
    Billets dans le blog
    21
    Par défaut
    il y a également la ligne 17 à changer !

  5. #5
    Membre confirmé
    Homme Profil pro
    Analyse système
    Inscrit en
    Février 2021
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2021
    Messages : 77
    Par défaut
    Mais non, on fait justement abstraction des lignes 14 à 18. C'est dans ce cas que le message de la ligne 7 ("Not a date 1") n'apparaît plus et qui provoque l'erreur "String was not recognized as a valid DateTime" à la ligne 20 , ce qui est l'objet de ma question.

  6. #6
    Expert confirmé

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 761
    Billets dans le blog
    21
    Par défaut
    Si on fait abstraction de ces lignes, le programme change !

    La ligne 20 est alors appelée sans que la validité du format de la date dans enddattxt soit vérifiée. Je suis prêt à parier que l'exception vient de là. Un petit coup de débogueur avec un point d'arrêt sur la ligne 20, et observer la valeur des champs vous le confirmera.

    ce qui est l'objet de ma question.
    Votre question n'est pas claire. C'est peut être évident pour vous car vous avez le code sous les yeux ainsi que le comportement observé, mais ce n'est pas notre cas !

    Dans votre message initial, la question est relative au message "not a date 2" qui n'apparait pas. Et là, vous l'avez tout simplement squizé dans votre dernier essai ! Nous n'avons pas de boule de cristal. Soyez clair et concis, et nous pourrons vous aider au mieux

  7. #7
    Membre confirmé
    Homme Profil pro
    Analyse système
    Inscrit en
    Février 2021
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2021
    Messages : 77
    Par défaut
    Bon, restons calmes. Je vais reformuler au mieux ma question. Considérez le code suivant.
    Si je laisse le champ 'begdat' vide ou sans date valide, je n'aurais jamais le message "Not a date 1." mais bien l'erreur
    String was not recognized as a valid DateTime
    Ma question est: pourquoi le message 'Not a date 1.' n'apparaît-il pas?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    protected void GridView1_RowUpdating(object sender, System.Web.UI.WebControls.GridViewUpdateEventArgs e)  
        GridViewRow row = (GridViewRow)GridView1.Rows[e.RowIndex];  
        TextBox begdattxt = (TextBox)row.FindControl("begdat");  
        if (!DateTime.TryParse(begdattxt.Text,out newDate))  
        {  
            e.Cancel = true;  
            ClientScript.RegisterClientScriptBlock(this.GetType(), "myscript", " alert('Not a date 1.');", true);
        }  
        else  
        {  
            begdat = Convert.ToDateTime(e.NewValues["begdat"]);  
        }
     
        if (Convert.ToDateTime(enddattxt.Text) < Convert.ToDateTime(begdattxt.Text))  
        {  
            e.Cancel = true;  
            Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "myscript", " alert('endate must be >= begindate.');", true);  
            enddattxt.Focus();  
        }
    }

  8. #8
    Expert confirmé

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 761
    Billets dans le blog
    21
    Par défaut
    La question est beaucoup plus claire ainsi posée. Merci.

    La réponse est simple, et un débogage en pas à pas vous permettra de vous en rendre compte. Lors de l'exécution de la méthode, le premier if est atteint. Puisque la valeur est invalide, la condition est vrai et on rentre donc dedans (et la partie else est ignorée).

    Une fois sortie du 1er if, on atteint le second. Comme la valeur de date est invalide, le Convert.ToDateTime génère une exception. Exception non attrapée donc la méthode sort brusquement et renvoie l'exception.

    Comme il s'agit d'une exception, les traitements que vous programmez (notamment les RegisterClientScriptBlock) ne sont pas envoyés au client. Seule l'exception l'est.

  9. #9
    Membre confirmé
    Homme Profil pro
    Analyse système
    Inscrit en
    Février 2021
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2021
    Messages : 77
    Par défaut
    Merci pour cette réponse claire.
    Donc, en résumé, le message du script est envoyé vers le client dans le stream. Mais comme il y a une erreur au niveau du serveur, le stream n'est pas envoyé vers le client.

  10. #10
    Expert confirmé

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 761
    Billets dans le blog
    21
    Par défaut
    c'est tout à fait ça.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Programme qui s'arrête sans savoir pourquoi
    Par daprog dans le forum Général Python
    Réponses: 5
    Dernier message: 12/07/2019, 11h13
  2. Pourquoi un programme s'arrête-t-il ?
    Par ceugniet dans le forum C++
    Réponses: 4
    Dernier message: 29/12/2008, 11h04
  3. Réponses: 4
    Dernier message: 09/09/2006, 22h48
  4. Réponses: 9
    Dernier message: 30/05/2006, 19h44
  5. Pourquoi la programmation Shell ?
    Par am.adnane dans le forum Linux
    Réponses: 14
    Dernier message: 21/01/2006, 01h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo