none
Requete sql erroné RRS feed

  • Discussion générale

  • Bonjour, 

    Je suis de retour pour solliciter votre aide ...

    En effet je suis encore face à un problème , ce problème découle d'une requête sql.

    Comme l'image ci-dessous le montre j'ai deux datagrid (celle du haut ) contenant toute mes factures et l'autre vide.

    j'ai une textBox a ma disposition de que je remplie de ma database avec le nom de mes clients.

    Je voudrais trouver la requête sql ou autre qui me permettra de mettre mes donnée selon mon client 

    en sachant que j'ai un id client dans la table facture pour faire une correspondance

    Juste pour info je remplie ma combo grace a ce code  : 

     private void ActualiserComboboxClient()
            {
                try
                {

                    bddEntities databaseEntities = new bddEntities();

                    // on definie un alias de la table Client.
                    var listClient = from client in databaseEntities.Client orderby client.nom select client.nom;
                    this.comboBoxClient.DataSource = listClient;

                    //ajout d'une aide à la completion dans la combobox client
                
                    AutoCompleteStringCollection autoCompleteStringCollection = new AutoCompleteStringCollection();

                    foreach (var client in listClient)
                    {
                        autoCompleteStringCollection.Add(Convert.ToString(client));
                    }

                    this.comboBoxClient.AutoCompleteCustomSource = autoCompleteStringCollection;
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Erreur lors du chargement de le ComboClient : \n "+ex);
                }
            }

    merci d'avance pour votre aide 

    jeudi 10 mai 2012 12:22

Toutes les réponses

  • Bonjour,

    Il y a plusieurs façons de procéder. Ma suggestion est de récupérer l'ID du client et son nom et de populer le ComboBox, comme ceci :

    using (bddEntities databaseEntities = new bddEntities())
    {
        var listClient = 
                         (from client in databaseEntities.Client
                          orderby client.nom
                          select client);
    
        // On popule le comboBox avec le résultat de la requête ci-dessus
        this.comboBoxClient.DataSource = listClient;
    
        // On affiche la colonne nom
        this.comboBoxClient.DisplayMember = "nom";
    
        // On utilise comme valeur la colonne ID
        this.comboBoxClient.ValueMember = "ID";
    }


    Ensuite on va utiliser l'évènement SelectedIndexChanged du ComboBox pour rafraichir le GridView en fonction de la valeur sélectionnée. Tout d'abord, on s'abonne à l'évènement comme ceci :

    this.comboBoxClient.SelectedIndexChanged += new EventHandler(comboBoxClient_SelectedIndexChanged);

    Ensuite on gère notre evènement :

    void comboBoxClient_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (sender is System.Windows.Forms.ComboBox)
        {
            var comboBox = (System.Windows.Forms.ComboBox)sender;
        }
    }

    A ce stade, comboBox.SelectedItem contient l'objet Client sélectionné par l'utilisateur. Il suffit donc de rajouter du code pour récupérer les informations de facturation correspondantes, en utilisant quelque chose du genre :

    void comboBoxClient_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (sender is System.Windows.Forms.ComboBox)
        {
            var comboBox = (System.Windows.Forms.ComboBox)sender;
    
            // On récupère l'objet Client
            Client selectedClient = (Client)comboBox.SelectedItem;
    
            // On appelle une méthode qui va se charger de récupérer les factures du client sélectionné, et de populer le DataGrid
            GetFactures(selectedClient.ID);
        }
    }

    Voilà, en espérant avoir aidé.

    Cordialement,
    Mathieu

    Consultant SI - Technos Microsoft .NET / Dynamics / MSSQL + BI

    jeudi 10 mai 2012 13:19
  • Merci pour cette explication j'y vois bcp plus claire il me reste une zone d'ombre quand vous faites 

    GetFactures(selectedClient.ID);

    cette fonction est defini ou ? est-ce une fonction prédéfini ou dois-je la faire moi-même

    si je dois la faire ça sera avec plaisir mais elle doit contenir quoi ?

    Merciiii encore pour votre aide et désolé du dérangement


    jeudi 10 mai 2012 13:33
  • Oui la méthode GetFactures() doit être définie. On peut procéder assez simplement comme ceci :

    void GetFactures(int clientID)
    {
        using (bddEntities databaseEntities = new bddEntities())
        {
            var listFactures =
                (from facture in databaseEntities.Factures
                 where facture.ClientID == clientID
                 select facture);
    
            this.DataGridFactures.DataSource = listFacture;
            this.DataGridFactures.DataBind();
        }
    }

    Voilà de manière très basique. Si la liste de factures est longue, il faudra envisager d'utiliser de la pagination, et éventuellement un chargement en asynchrone pour ne pas bloquer l'UI pendant que la requête tourne...

    Cordialement,
    Mathieu

    Consultant SI - Technos Microsoft .NET / Dynamics / MSSQL + BI

    jeudi 10 mai 2012 13:43
  • Merci beaucoup pour toutes ces explications ...

    mais je vais encore vous enbeter car quand vous faite 

    this.DataGridFactures.DataBind();

    j'ai une erreur à databind() comme je connais pas ce composant je vais me renseigner et essayer de savoir ou est la faute :)

    Je vous remercie encore :)

    jeudi 10 mai 2012 16:22
  • Désolé de vous déranger mais j'ai toujours pas trouvée la faute ...

    Quelqu'un a une idée ??

    lundi 14 mai 2012 10:13
  • Voici l'erreur : 

    system.windows.forms.datagridvieux ne contient pas de définition pour 'DataBind' et aucune méthoe d'extension 'Databind acceptant un premier argument de type 'Sytem.Forms.Datagridvieuw n'a été trouvé ( une directive using ou une référence d'assembly est-elle manquante ?)

    Merciii

    mardi 15 mai 2012 12:57
  • Bonjour,

    Est-ce que cela marche si on supprime tout simplement la ligne concernée ?

    Il y a eu apparemment un petit mélange de pinceau entre les contrôles Windows (DataGrid ou DataGridView sans méthode DataBind) et Web (DataGrid ou GridView avec effectivement une méthode DataBind).


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".

    mardi 15 mai 2012 16:43
    Modérateur
  • Effectivement quand je retire la ligne ça fonctionne , je pense donc que je vais laisser ça comme cela ...

    Merci pour votre aide à tous :)

    jeudi 17 mai 2012 17:49