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

ASP.NET Discussion :

Checkbox erreur avec asp.net C#


Sujet :

ASP.NET

  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 10
    Par défaut Checkbox erreur avec asp.net C#
    Bonsoir, je suis débutant en Asp.NET et j'ai un problème avec mon code qui est sensé rendre un champ checkbox disponible oui occuper
    Voila mon code aspx
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     <asp:GridView ID="GridView1" runat="server" AllowPaging="True" AutoGenerateColumns="False" BackColor="White" BorderColor="#336666" BorderStyle="Double" BorderWidth="3px" CellPadding="4" DataKeyNames="Num_1,Num_2" DataSourceID="SqlDataSource1" GridLines="Horizontal">
                <Columns>
                    <asp:BoundField DataField="Num_1" HeaderText="Num_1" ReadOnly="True" SortExpression="Num_1" />
                    <asp:BoundField DataField="Num_2" HeaderText="Num_2" ReadOnly="True" SortExpression="Num_2" />
                    <asp:TemplateField HeaderText="Disponibilités" SortExpression="Disponibilités">
     
                        <ItemTemplate>
                            <asp:CheckBox ID="CheckBox1" runat="server" AutoPostBack="true" OnCheckedChanged="CheckBox1_CheckedChanged" Checked='<%# Convert.ToBoolean(Eval("Disponibilités")) %>' Text='<%# Eval("Disponibilités").ToString().Equals("True") ? " Occuper " : " Disponible " %>' Enabled="true" />
                        </ItemTemplate>
                    </asp:TemplateField>
                </Columns>
            </asp:GridView>
    et voici mon code aspx.cs
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Data;
    using System.Data.OleDb;
    using System.Configuration;
     
    public partial class accees : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
     
        }
     
        protected void CheckBox1_CheckedChanged(object sender, EventArgs e)
        {
            CheckBox CheckBox1 = (CheckBox)sender;
            GridViewRow row = (GridViewRow)CheckBox1.NamingContainer;
     
            String selection = row.Cells[1].Text;
            bool check = CheckBox1.Checked;
     
            OleDbConnection conn = new OleDbConnection(ConfigurationManager.ConnectionStrings["avConnectionString"].ConnectionString);
            conn.Open();
            String update = "UPDATE dispo SET dispo.Occupation = @dispo.Occupation FROM dispo INNER JOIN compte ON dispo.Num_2 = compte.Num_2 WHERE dispo.Num_1 = compte.Num_1";
     
            OleDbCommand com = new OleDbCommand(update, conn);
            com.Parameters.Add("Disponibilités", OleDbType.Char).Value = selection;
            com.Parameters.Add("Num_1", OleDbType.LongVarChar).Value = check;
     
            com.ExecuteNonQuery();
     
            conn.Close();
        }
    }
    et j'ai un erreur quand je check le checkbox "Syntax error (missing operator) in query expression '@dispo.Occupation FROM dispo INNER JOIN compte ON dispo.Num_2 = compte.Num_2'"
    tout les idées d'aides sont les bienvenues, Merci

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    La syntaxe de ta requête SQL n'est pas valide, notamment à cause du point dans le nom du paramètre dispo.Occupation. Tu devrais plutôt avoir quelque chose comme ceci :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE dispo SET dispo.Occupation = @dispoOccupation FROM dispo INNER JOIN compte ON dispo.Num_2 = compte.Num_2 WHERE dispo.Num_1 = compte.Num_1

    En prime on peut également constater que tu injectes 2 paramètres, alors que tu n'en as besoin que d'un seul (@dispoOccupation) :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    OleDbCommand com = new OleDbCommand(update, conn);
    com.Parameters.Add("Disponibilités", OleDbType.Char).Value = selection;
    com.Parameters.Add("Num_1", OleDbType.LongVarChar).Value = check;
    Devrait donc devenir :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var com = new OleDbCommand(update, conn);
    com.Parameters.Add("@dispoOccupation", OleDbType.Char).Value = selection;
    Ou quelque chose de ce genre.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 10
    Par défaut
    Merci pour votre réponse,
    Mais ça marche pas encore c'est toujours la même erreur avec la requete.

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    777
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 777
    Par défaut
    A quoi sert la jointure dans ton update ??? A mon avis tu peux t'en passer ce qui t'évitera des problèmes de performance plus tard.
    Je ne suis pas certain mais j'ai un souvenir que, en oledb, dans la requête tu dois mettre un ? à la place du nom de paramètre (@nom) et ensuite respecter l'ordre dans l'ajout des paramètre à la collection.

    Si ce n'est pas ca, alors il faut préciser aussi le @ dans le nom du paramètre...

    C'est un des 2

  5. #5
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 10
    Par défaut
    Merci!!
    Mais j'ai besoin de cette jointure parce que dans la requete dispo et compte sont deux table et dispo depend de compte pour que la disponibilités de la table dispo soit checked, en plus j'ai deja essaie sans la jointure mais ça marche pas.
    Merci pour votre réponse, je vais y voir de ce côté.

  6. #6
    Membre Expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Par défaut
    Salut,

    plusieurs remarques :
    - les paramètres doivent être définis avec le @ dans leur nom lors de l'ajout,
    - les paramètres doivent avoir le même nom que dans ta requête,
    - tu ajoutes un paramètre Num_1 qui n'est pas référencé dans ta requête,
    - tu utilises un type LongVarChar pour un paramètre booléen en cast implicite.

  7. #7
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 10
    Par défaut
    Salut,

    C'est maintenant que je me rend compte que Num_1 n'est pas definis dans Update, et peux tu me dire comment pourrai je le definir parce que la j'en ai aucune idée de comment pourrai je le faire.
    Pour le type booléen, c'est que je l'avait déclaré en type Booléen mais y avait une erreur donc je l'ai changé en type Long VarChar.
    Merci

  8. #8
    Membre Expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Par défaut
    Je te conseille donc de regarder OleDbParameter, OleDbCommand, OleDbType et n'hésite pas à suivre les liens qui y sont proposés.

    Un exemple générique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    OleDbCommand cmd = new OleDbCommand("SELECT field FROM table WHERE id = @id", cnx);
    cmd.Parameters.Add("@id", OleDbType.Int32).Value = 123;
    Pour le type du paramètre Num_1 c'est pas au petit bonheur la chance, ça dépend de ton schéma en base.
    Si c'est un booléen il faut utiliser OleDbType.Boolean (et pas besoin de caster ton checked),
    Si c'est un caractère (O/N) il faut utiliser OleDbType.Char et caster ton checked (checked ? 'O' : 'N'),
    Si c'est un entier (0/1) il faut utiliser OleDbType.Int16 ou Int32 et caster ton checked (checked ? 1 : 0).

  9. #9
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 10
    Par défaut
    bonjour,
    Merci, j'ai vérifié et c'est du typa O/N, mais j'ai caster mon checked occuper ? Disponible pour Oui ? Non
    donc j'ai un peu changé mon code comme suit
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Data;
    using System.Data.OleDb;
    using System.Configuration;
     
    public partial class accees : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                LoadData();
            }
        }
     
        private void LoadData()
        {
            OleDbConnection conn = new OleDbConnection(ConfigurationManager.ConnectionStrings["avConnectionString"].ConnectionString);
     
            String query = "SELECT * FROM dispo" ;
     
            OleDbDataAdapter da = new OleDbDataAdapter(query, conn);
            DataTable dt = new DataTable();
            da.Fill(dt);
            GridView1.DataBind();
        }
     
        protected void CheckBox1_CheckedChanged(object sender, EventArgs e)
        {
     
     
            CheckBox CheckBox1 = (CheckBox)sender;
            bool check = CheckBox1.Checked;
            GridViewRow row = (GridViewRow)CheckBox1.NamingContainer;
            String selection = row.Cells[1].Text;
     
            OleDbConnection conn = new OleDbConnection(ConfigurationManager.ConnectionStrings["avConnectionString"].ConnectionString);
            conn.Open();
            String update = "UPDATE dispo SET Occupation = @Occupation, WHERE Num_1 = @Num_1";
            OleDbCommand com = new OleDbCommand(update, conn);
            com.Parameters.Add("@Occupation", OleDbType.Char).Value = check;
            com.Parameters.Add("@Num_1", OleDbType.Char).Value = selection;
     
            com.ExecuteNonQuery();
     
            conn.Close();
            LoadData();
        }
    }
    mais quand je check j'ai l'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    System.Data.OleDb.OleDbException: Syntax error in UPDATE statement.

  10. #10
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Dans ton instruction UPDATE, supprime la virgule après @Occupation.

    Sinon, quel SGBD utilises-tu ? SQL Server ?
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  11. #11
    Membre Expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Par défaut
    Comme le dit DotNetMatt tu as une virgule en trop dans ta requête.
    Quelques nouvelles remarques :
    - tu as inversé tes valeurs check/selection par rapport au premier code que tu nous as montré (à tort ou à raison),
    - OleDbType.Char est censé mappé un char, préfère VarChar si ton paramètre correspondant à une string,
    - pour le cast du bool tu peux utiliser directement l'attribut Checked de ta CheckBox (pas besoin de déclarer une variable) et le conditionnel ternaire '?' :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    com.Parameters.Add("@Occupation", OleDbType.Char).Value = CheckBox1.Checked ? "O" : "N";
    Rappel fonctionnement expression ternaire '?' :
    expression ? valeur_si_vrai : valeur_si_faux

  12. #12
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 10
    Par défaut
    oui tu n'as pas tort je les ai inversés, et tu trouve que c'est une erreur?
    merci j'ai pas vu le virgule avec mon update et c'était vraiment bête de ma part
    et j'ai suivi tes conseils et là j'ai plus d'erreur mais m'était impossible maintenant de cocher les checkBox.

  13. #13
    Membre Expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Par défaut
    Citation Envoyé par Mathildas1 Voir le message
    oui tu n'as pas tort je les ai inversés, et tu trouve que c'est une erreur?
    Ben ça c'est pas à moi de décider. Ta variable selection doit-elle être associée à ton paramètre Occupation ou Num_1 ?

    Citation Envoyé par Mathildas1 Voir le message
    et j'ai suivi tes conseils et là j'ai plus d'erreur mais m'était impossible maintenant de cocher les checkBox.
    Tu n'arrives plus à cocher au niveau de l'interface, ou le fait de cocher/décocher n'a plus d'impact sur ta requête ?

  14. #14
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 10
    Par défaut
    c'est au niveau de l'interface

  15. #15
    Membre Expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Par défaut
    Quand tu cliques sur ta CheckBox tu as bien le retour serveur ?

  16. #16
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 10
    Par défaut
    oui ya bien sur retour au serveur mais le checkbox n'est cocher ou decocher

  17. #17
    Membre Expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Par défaut
    Mets toi en debug pas-à-pas dans ton event, regarde si toute la fonction se déroule correctement et si ta donnée est bien changée en base. Là franchement ça me parait bizarre comme comportement, doit y'avoir une nouille dans la fonction.

  18. #18
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    777
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 777
    Par défaut
    Est ce que dans ton code tu initialise ta checkbox ? Si oui dans quel évenement ?

Discussions similaires

  1. erreurs avec asp.net affichage web
    Par dorian2031 dans le forum ASP.NET
    Réponses: 1
    Dernier message: 14/02/2007, 11h09
  2. Erreur connexion asp.net oracle
    Par WELCOMSMAIL dans le forum Connexions aux bases de données
    Réponses: 9
    Dernier message: 05/04/2006, 09h07
  3. probleme css avec asp.net
    Par toddy_101 dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 28/03/2006, 11h37

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