Partage
  • Partager sur Facebook
  • Partager sur Twitter

c# filtrage des données bdd par checkbox

Sujet résolu
    22 juin 2016 à 13:43:20

    Bonjour,

    J'ai un projet à faire (je code en c#,.net sur visual studio). J'ai un champ recherche pour effectuer une recherche dans ma bdd par mot clé, avec a coté des checkbox qui représente des rubriques(colonne "sousRubrique" de la bdd) pour filtrer les demandes. Mon code :

     protected void Populate()
            {
    
                string word = tbSearch.Text;
                
                string strSql = @"SELECT CAST(ID as VarChar(50)) ID, Aggregation, DateDerniereSolution, DateDescription, DerniereSolution, DescriptionDemande, FileDeTraitement, NomContact, Numero, SousRubrique, TitreDemande
                       FROM tableName WHERE ( 1 = 1 )";
    
                string selectedValue = "";
    
                foreach (ListItem item in CheckboxID.Items)
                {
                    if (item.Selected)
                    {
                        selectedValue += "%" + item.Value + "%";
    
                    }
                }
    
                strSql += @" AND SousRubrique LIKE '" + selectedValue + "'";
              
    
                if (!string.IsNullOrEmpty(word))
                {
                    strSql += @" AND DescriptionDemande LIKE '%" + word + "%' ";
                }
    
                
                
                ADV.Visible = false;
                DataTable DTDeskCache = DataBaseCacheDigitalHepDeskConnection.SqlDataTable(strSql, "DIGIHELP_DB");
             
                
                gvData.DataSource = DTDeskCache;
                gvData.DataBind();
    
            }


    La recherche par mot clé s'effectue dans la colonne "DescriptionDemande". Quand je tape "facture" par exemple, les résultats qui s'affichent sont uniquement les résultats de la rubrique coché dans les checkbox. Seulement je veux que la recherche se fasse aussi dans la colonne "titreDemande" : 

    if (!string.IsNullOrEmpty(word))
                {
                    strSql += @" AND DescriptionDemande LIKE '%" + word + "%' OR TitreDemande LIKE '%" + word + "%' ";
                }

    Seulement en rajoutant "OR [...]" le filtrage par checkbox ne marche plus.. Si je tape un résultat qui ne se trouve pas dans la rubrique coché il me l'affichera quand même.. Quelqu'un aurait une idée ?

    • Partager sur Facebook
    • Partager sur Twitter
      22 juin 2016 à 13:52:13

      Hello,

      En intro, j'avoue ne pas trop comprendre pourquoi tu fais ce genre de choses en C#. Ça conduit à des erreurs et c'est très difficilement maintenable, a minima, pense à jeter un oeil du côté des requêtes paramétrées pour éviter de tomber dans le calvaire des injections SQL.

      Ceci étant dit, ton soucis est sûrement dû à un manque de parenthèses quelque part. AND à la priorité sur OR et ta requête ne doit pas se dérouler comme tu l'entends, essaye d'ajouter des parenthèses à la fin pour englober les deux WHERE séparés par un OR.

      • Partager sur Facebook
      • Partager sur Twitter
      Si un message vous a aidé, n'oubliez pas le +1 et de passer votre sujet en "Résolu" ! :)
        22 juin 2016 à 14:00:24

        Bonjour,
        Je suis en stage et du coup pas trop le choix sur le langage à utiliser.. :(
        En tout cas merci pour ta réponse je vais essayer ça !
        • Partager sur Facebook
        • Partager sur Twitter
          22 juin 2016 à 15:24:22

          Attention, je ne me plains pas du choix de C# mais plutôt de l'utilisation que tu en fais.

          Utiliser ce genre de méthode pour faire une requête SQL ça fait très "vieux PHP" et ça n'est pas très moderne, pour faire simple, plus personne ne fait ça comme ça et ce n'est pas trop réaliste de l'évolution de la technologie aujourd'hui. Après je suis d'accord que dans les faits, on a pas toujours le choix, etc.

          • Partager sur Facebook
          • Partager sur Twitter
          Si un message vous a aidé, n'oubliez pas le +1 et de passer votre sujet en "Résolu" ! :)
            23 juin 2016 à 10:21:09

            Ah oui j'ai mal compris. En fait je suis débutante en c# et en développement tout court et du coup ça se reflète dans ma façon de coder :D   mais maintenant que tu as relevé le sujet je vais me pencher dessus :)
            Sinon merci pour ton aide, tout fonctionne correctement maintenant :D

            -
            Edité par Fantominuss 23 juin 2016 à 10:21:35

            • Partager sur Facebook
            • Partager sur Twitter

            c# filtrage des données bdd par checkbox

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown