none
réccupérer la valeur d'un datagridviewcheckbox dans une table sqlserver2005 en C# RRS feed

  • Question

  • bonjour tout le monde,
    je suis entrain de developper une application avec C# et sql server 2005,
    j'utilise un datagridview dont la première colonne est de type datagridviewchekbox,
    je veux récupérer la valeur de cette colonne dans la table qui correspond à mon datagridview,
    c-à-d si je coche le checkbox dans le datagridview j'aurai dans ma table sql TRUE, si non j'aurai FALSE,
    je vous informe que j'ai déclaré le type de champ concerné dans ma table sql "BIT" .

    je vous donne mon code qui n'a pas marché:

    Code :

     [code]SqlConnection connection = new SqlConnection(str);
                        connection.Open();
                        System.Diagnostics.Debug.Write("connection établie");
                        SqlDataAdapter da = new SqlDataAdapter();
     
    SqlCommand cmdupdate = new SqlCommand("update TableInter set Affectation=@Affectation where id_role='" + id_roleTextBox.Text + "' and id_fonct='" + textBox2.Text + "' and id_droit='" + textBox1.Text + "'", connection);
    cmdupdate.Parameters.Add(new SqlParameter("@Affectation", SqlDbType.Bit, 10, "Affectation"));
     
    if (bool.Parse(dataGridView3[0, e.RowIndex].Value.ToString()) == true)
                        {
                            cmdupdate.Parameters["@Affectation"].Value = Convert.ToDouble(dataGridView3[0, e.RowIndex].Value);//true;
                        }
                        else
                        {
                            cmdupdate.Parameters["@Affectation"].Value = 0.0;//false;
     
                        }
     
                        cmdupdate.ExecuteNonQuery();
                        da.UpdateCommand = cmdupdate;
     
    MessageBox.Show("OK");
                        connection.Close();
                    }
                    catch (Exception xcp)
                    {
                        MessageBox.Show(xcp.Message);
                    }
     [/code]

    REMARQUE:

    IL M'AFFICHE LE MESSAGE OK MAIS IL INSERE PAS DANS LA TABLE "TableInter", LA requête marche trés bien car je l'a testé sous SQL server.
    donc j'ai un pbm d'affectation de la valeur de datagridviewcheckbox.
    Merci pour vos réponses

    lundi 29 novembre 2010 15:46

Réponses

  • Bonjour,

    Pourquoi affecter un double ? J'affecterai plutôt un booléen (en plus on mets "true" si le texte peut-être "parsé" en boolean indépendamment de sa valeur réelle).

    En résumé j'utiliserais donc dataGridView3[0, e.RowIndex].Value qui doit déjà être un booléen étant donné que cette colonne est booléenne.

    Egalement un petit coup de SQL Server Profiler permet de voir quelle est l'instruction UPDATE envoyée vers le serveur et de voir sans doute ici que l'on envoie toujours la même valeur...


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    • Proposé comme réponse Papy Normand mardi 7 décembre 2010 09:48
    • Marqué comme réponse Alex Petrescu vendredi 10 décembre 2010 08:52
    lundi 6 décembre 2010 17:12
    Modérateur

Toutes les réponses

  • Bonjour,

    Pourquoi affecter un double ? J'affecterai plutôt un booléen (en plus on mets "true" si le texte peut-être "parsé" en boolean indépendamment de sa valeur réelle).

    En résumé j'utiliserais donc dataGridView3[0, e.RowIndex].Value qui doit déjà être un booléen étant donné que cette colonne est booléenne.

    Egalement un petit coup de SQL Server Profiler permet de voir quelle est l'instruction UPDATE envoyée vers le serveur et de voir sans doute ici que l'on envoie toujours la même valeur...


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    • Proposé comme réponse Papy Normand mardi 7 décembre 2010 09:48
    • Marqué comme réponse Alex Petrescu vendredi 10 décembre 2010 08:52
    lundi 6 décembre 2010 17:12
    Modérateur
  • Bonjour,

    Juste un petit complément à la bonne réponse de Patrice.

    Quel est le type de la colonne Affectation de votre table TableInter ? Il faut que ce soit un bit pour 2 raisons :

    - Boolean est le type de .Net correspondant au type bit de SQL Server

    - un bit occupe au maximum un espace de stockage de 8 bits (octet).Par contre, vous pouvez mettre jusqu'à 8 colonnes de type bit dans cet espace. Pour plus de renseignements , voir page 193 Chapitre 6 de l'excellent livre de Kaleen Delaney : Inside Microsoft SQL Server 2005 : The Storage Engine (Microsoft Press). Au contraire, les types Decimal et Numeric occupent au minimum 5 octets ( pour une précision de 1 à 9 ), pour float et real , le minimum de place est 4 octets ( en plus tenter de comparer un float à 0 est presque du suicide à cause de la précision des valeurs stockées dans la base , faites un test en ayant une base sur un ordinateur ayant un AMD et ensuite sur un INTEL, la valeur n'est pas la même ).

    Voir aussi :

    http://msdn.microsoft.com/fr-fr/library/ms173773(v=SQL.90).aspx

    http://msdn.microsoft.com/fr-fr/library/ms177603(v=SQL.90).aspx

    Bonne journée


    Mark Post as helpful if it provides any help.Otherwise,leave it as it is.
    mardi 7 décembre 2010 10:09
  • Bonjour,

     

    Hafsa12, je vous remercie de nous confirmer si l’utilisation d’un boolean au lieu d’un double donne des meilleurs résultats.

     

    Cordialement,

    Alex

    ________________

    Publiez un article sur MSDN !

    Windows Phone 7

    Astuces pour Visual Studio 2010

    XNA – Développement jeux vidéo

    Didacticiels et astuces : VB.NET, C#, ASP.NET, .NET Framework, Silverlight, Workflow Foundation, SharePoint, WPF

    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

     

     


    Suivez MSDN sur Twitter 

    mercredi 8 décembre 2010 14:07