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 :

Trois erreurs de conversion


Sujet :

C#

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

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

    Informations forums :
    Inscription : Février 2021
    Messages : 77
    Points : 51
    Points
    51
    Par défaut Trois erreurs de conversion
    Bonjour

    J'ai converti une application de vb.net vers C# mais avec trois erreurs.
    Merci pour votre aide.
    R

    1)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     if (e.Row.RowState == 0 | e.Row.RowState == 1)
    =>
    Operator '==' cannot by applied to operands of type 'System.Web.UI.WebControls.DataControlRowState' and 'int'
    L'erreur se situe à droite du signe | (e.Row.RowState == 0 ne donne pas d'erreur).


    2) Comment convertir cette ligne de vb.net en C#: contrôle si ce qui a été introduit sont bien des dates
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if Not IsDate(e.Values("begdat3")) Or Not IsDate(e.Values("enddat3") then
    J'ai essayé ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ( ! e.Values["begdat3"] is DateTime | ! e.Values["enddat3"] is DateTime )
    mais alors erreur:
    Operator '!' cannot by applied to operands of type 'System.DateeTime

    3)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            var naamtxt = new TextBox();
            foreach (var dvr in DetailsView1.Rows)
                naamtxt = (TextBox)dvr.FindControl("naamtxt");
            naamtxt.Focus();
    Code aspx:
    Code in the aspx page:
    Code aspx : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <asp:TemplateField ><InsertItemTemplate>
    <asp:TextBox id="naamtxt" runat="server" Text='<%# Bind("naam") %>' ></asp:TextBox>
    </InsertItemTemplate></asp:TemplateField>

    Ceci donne l'erreur:
    object does not contain a definition for 'FindControl' ...

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Bonjour,
    Pour la première erreur, d'après l'aide en ligne, cette propriété n'est pas de type entier, d'où l'erreur.
    Il faut utiliser l'énumération DataControlRowState pour avoir les différentes valeurs.

    Pour les dates, je me tournerais vers un DateTime.TryParse(), qui devrait faire l'affaire ici.

    Et pour la troisième question, aucune idée

    Tatayo.

  3. #3
    Expert éminent sénior

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

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

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 760
    Points : 10 541
    Points
    10 541
    Billets dans le blog
    21
    Par défaut
    Attention, | est l'opérateur OU Logique. L'opérateur OU Booléen, c'est ||. Cela devrait corriger une partie des erreurs, dans la mesure où les opérateurs logiques sont les opérateurs les plus prioritaires.
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

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

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

    Informations forums :
    Inscription : Février 2021
    Messages : 77
    Points : 51
    Points
    51
    Par défaut
    Citation Envoyé par tatayo Voir le message
    Bonjour,
    Pour la première erreur, d'après l'aide en ligne, cette propriété n'est pas de type entier, d'où l'erreur.
    Il faut utiliser l'énumération DataControlRowState pour avoir les différentes valeurs.

    Pour les dates, je me tournerais vers un DateTime.TryParse(), qui devrait faire l'affaire ici.

    Et pour la troisième question, aucune idée

    Tatayo.
    Merci pour les réponses.
    1) est réglé avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    e.Row.RowState == DataControlRowState.Normal || e.Row.RowState == DataControlRowState.Alternate
    3) j'ai trouvé ceci qui apparemment marche:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    foreach (DetailsView row in DetailsView1.Rows)
            {
                naamtxt = (TextBox)DetailsView1.FindControl("naamtxt");
    }
    2) Ici, j'ai essayé ceci sans succès:
    if (DateTime.TryParse(e.Values["begdat"]) ) (erreur: No overload for method 'TryParse' takes 1 arguments)
    Et puisque e.Values["begdat"] est un object, je le convertis en Datetime et j'ai aussi essayé ça:
    if (DateTime.TryParse(Convert.ToDateTime(e.Values["begdat"])) (même erreur)

    ??

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Il faut quand même faire un minimum d'effort.
    L'erreur t'indique qu'il manque (au moins) un paramètre.
    Une simple recherche sur internet, et tu trouves les syntaxes valides pour cette méthode.
    Je ne sais pas quel IDE tu utilises, mais VS avec intellisense t'indique directement les différents syntaxes, les paramètres associés et la valeur de retour.
    Et un F1 sur la méthode te renvoie directement sur l'aide en ligne de Microsoft.

    Accessoirement, pourquoi cumuler convert.ToDateTime et DAteTime.TryPArse ? Tu commences par convertir en DAteTime, puis te tentes de convertir en DateTime.
    C'est un peu redondant, non ?

    Tatayo.

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

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

    Informations forums :
    Inscription : Février 2021
    Messages : 77
    Points : 51
    Points
    51
    Par défaut
    Désolé, je débute en C#. Des efforts, j'en ai déjà fait pas mal cette semaine. Tous les jours, je découvre des choses. Aujourd'hui, j'ai trouvé entre autre la question 3.
    Pour la 2), je vois qu'il faut un argument 'string', puis un argument out DateTime result. Le 'out' vient de la liste, mais après ..? Je veux juste savoir si ce qui est rentré est une date.

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Comme je le disais, tu peux regarder dans l'aide en ligne fournie par Microsoft (aide en ligne très complète d'ailleurs):
    C'est là.
    Tous les paramètres sont clairement décrits: type, sens, but… Il y a même un exemple de code.
    C'est d'ailleurs ce que j'ai fait tout à l'heure, j'avais un doute sur la syntaxe.

    Quand tu butes sur un problème de paramètre comme ici, je t'encourage vivement de consulter l'aide en ligne.
    Dans la grande majorité des cas tu vas trouver la solution, surtout comme ici quand tu connais la fonction à utiliser, mais que tu butes sur un problème de paramètre.

    Tatayo.

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

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

    Informations forums :
    Inscription : Février 2021
    Messages : 77
    Points : 51
    Points
    51
    Par défaut
    Merci de tes conseils. Je ne fais que ça depuis une semaine, mais parfois on ne trouve pas.
    Voilà ma dernière tentative:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DateTime bg;
    if (DateTime.TryParse(e.Values["begdat"],out bg)
    Ca donne
    the best overloaded method match for System.DateTime ... has some invalid argument
    Quel argument est invalide? Est-ce dû à e.Values["begdat2"] qui est un 'object'? Mais ne te crois plus obligé de m'aider.

  9. #9
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Comme indiqué dans l'aide, le premier paramètre doit être une chaine, et non un objet, et le deuxième de type DateTime? et non DateTime.
    La différence est importante ici, car la méthode peut renvoyer la "valeur" null si la tentative de conversion échoue.

    Il faut donc faire deux choses ici: changer le type de bg, et récupérer la valeur de DateTime.TryParse(e.Values["begdat"], c'est à dire la chaine à parser.

    Comme on ne connais pas la nature de l'objet en question, il est difficile de te dire comment récupérer cette chaine.
    Il faut regarder les méthodes qu'il expose. Peut-être avec la méthode toString(), mais ce n'est qu'une hypothèse de ma part.

    Tatayo.

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

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

    Informations forums :
    Inscription : Février 2021
    Messages : 77
    Points : 51
    Points
    51
    Par défaut
    Citation Envoyé par tatayo Voir le message
    Comme indiqué dans l'aide, le premier paramètre doit être une chaine, et non un objet, et le deuxième de type DateTime? et non DateTime.
    La différence est importante ici, car la méthode peut renvoyer la "valeur" null si la tentative de conversion échoue.

    Il faut donc faire deux choses ici: changer le type de bg, et récupérer la valeur de DateTime.TryParse(e.Values["begdat"], c'est à dire la chaine à parser.

    Comme on ne connais pas la nature de l'objet en question, il est difficile de te dire comment récupérer cette chaine.
    Il faut regarder les méthodes qu'il expose. Peut-être avec la méthode toString(), mais ce n'est qu'une hypothèse de ma part.

    Tatayo.
    Ok, merci.
    Je vais me débrouiller.
    R

Discussions similaires

  1. Erreur de conversion
    Par HULK dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 06/09/2005, 11h14
  2. Erreur de conversion
    Par franculo_caoulene dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 01/08/2005, 16h23
  3. Erreur de conversion et requête dynamique dans une procédure
    Par franculo_caoulene dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 01/08/2005, 15h12
  4. Erreur de conversion de type Null en String
    Par navis84 dans le forum Bases de données
    Réponses: 3
    Dernier message: 26/07/2005, 15h25
  5. Erreur de conversion int to socklen_t
    Par def_jam_vendetta dans le forum C++
    Réponses: 6
    Dernier message: 04/03/2005, 10h53

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