none
Accéder à un DataGrid d'un form depuis un autre RRS feed

  • Question

  • Bonjour,

    Je dispose de 2 forms. Un avec un DataGrid remplis par une liste de produit provenant d'une base de donnée SQL Server et un autre qui est un petit formulaire d'ajout. Je voudrais que quand l'utilisateur se trouve sur le formulaire d'ajout, et ajoute un produit après avoir sauvegardé le nouveau produit dans la base de donnée, celui-ci soit aussi ajouté dans mon datagrid pour qu'il soit à jours. Cependant quand j'essaie de rajouter une ligne dans le DataGrid depuis le formulaire qui n'est pas celui où il se situe, je ne peux le faire. J'ai un message d'erreur qui me dit que je ne peux modifier les données du DataGrid. Mais quand je tente d'ajouter une ligne depuis le form qui dispose du DataGird aucun problème.

    Donc comment faire pour ajouter une ligne dans un DataGrid depuis un autre form que celui où est ce DataGrid?

    Pour info, je travailles dans mon lycée sur Visual Studio 2003 avec .NET 1.1 (ils n'ont pas encore mis à jours.....).

    Je vous remercie d'avance.
    mercredi 21 octobre 2009 08:23

Réponses

  • Bonjour,

    Le plus simplement, le plus proprement et le plus performant est de faire une requête SQL qui récupère uniquement ce que vous souhaitez afficher.
    C'est à dire faire une requête : "SELECT Nom, Prix, Stock FROM VotreTable".
    Ainsi, dans votre DataSet vous avez uniquement les informations qui vous interesse et que vous souhaitez afficher.

    Cordialement

    Gilles TOURREAU - MVP C# - Architecte .NET/Consultant/Formateur
    • Marqué comme réponse Takumii lundi 26 octobre 2009 16:52
    • Non marqué comme réponse Takumii lundi 26 octobre 2009 17:57
    • Marqué comme réponse Takumii mardi 27 octobre 2009 18:23
    jeudi 22 octobre 2009 21:08
    Modérateur
  • Bonjour,

    Takumii, utilise Visual Studio 2003, il n'a donc pas vraiment le choix...
    Je ne sais plus comment on peut changer le nom des colonnes d'un DataGrid, cependant vous pouvez utilisez des alias dans votre requête SQL :

    SELECT libelle_prod AS [Libellé du produit] FROM MaTable

    Normalement, le nom de la colonne affichée, devrait être celui de l'alias.

    Cordialement
    Gilles TOURREAU - MVP C# - Architecte .NET/Consultant/Formateur
    • Marqué comme réponse Takumii mardi 27 octobre 2009 20:27
    mardi 27 octobre 2009 20:07
    Modérateur

Toutes les réponses

  • Bonjour Takomi!

    Si je bien compris tu veux ajouter une ligne dans un DataGrid pour afficher dans cette ligne des données fraichement enregistrés dans la Banque de données.

    Un datagrid recoit ses données par un dataset qui lui recoit ses données au debut de la connextion de la banque de données. Aprés le remplisage du dataset se lui ci n'est plus en contact constante avec la banque de données. Le Dataset met ses données dans la memoire et ton Datagrid est remplis avec les données dans la memoire.
    L'ajout de nouvelles données avec un formulaire doit donc ajouter ces données au dataset et non directement dans la banque de données. Comme le datagrid est relié directement au dataset les données sont automatiquement rajoutés au datagrid.Si ce nest pas le cas alors on fait aparètre les nouveaux données en utilisant la methode Refresh (DataGrid1.Refresh). On utilise en general le ajoute de nouvelles lignes dans un datagrid pour remplier celles ci avec des données qui n'ont pas encor etés enregistrés ni dans le DataSet, ni dans la banque de données.

                                                        Cordialement Heka2

    mercredi 21 octobre 2009 10:30
  • Bonsoir,

    En faite quand mon application se lance, je charge les données de ma table 'produit' depuis SQL Server dans un dataset, comme tu as dit. Cependant pour mettre mes données dans le DataGrid, je dit pas de mettre directement tous le DataSet. Je m'explique en faite ma table 'produit' est constitué de plusieurs champs: id, nom, prix, stock, description,..... Mais dans le DataGrid je ne voulais afficher que le nom, le prix et le stock. Alors pour ne mettre que ce que je voulais plutôt que tous, j'ai fait un For sur le nombre d'élément de mon DataSet et ajouté chaque ligne dans un DataTable, puis quand il était remplis j'ai ajouté mis ce DataTable dans le DataSource de mon DataGrid. Si j'ai récupéré tous les champs c'est parce que je voulais m'en servir pour d'autre chose.Donc en faite si je modifie le DataSet cela ne changera rien je pense vu qu'il n'est pas relié directement au DataGrid. J'espère avoir été assez clair dans les explications.

    Merci d'avance.
    mercredi 21 octobre 2009 16:46
  • Bonjour,

    Le plus simplement, le plus proprement et le plus performant est de faire une requête SQL qui récupère uniquement ce que vous souhaitez afficher.
    C'est à dire faire une requête : "SELECT Nom, Prix, Stock FROM VotreTable".
    Ainsi, dans votre DataSet vous avez uniquement les informations qui vous interesse et que vous souhaitez afficher.

    Cordialement

    Gilles TOURREAU - MVP C# - Architecte .NET/Consultant/Formateur
    • Marqué comme réponse Takumii lundi 26 octobre 2009 16:52
    • Non marqué comme réponse Takumii lundi 26 octobre 2009 17:57
    • Marqué comme réponse Takumii mardi 27 octobre 2009 18:23
    jeudi 22 octobre 2009 21:08
    Modérateur
  • Bonjour,

    Oui je vais faire comme cela merci pour votre réponse.

    Par contre, si je met directement mon DataSet dans mon DataGrid, puis-je quand même changer le nom des entêtes du DataGrid? Car si j'ai un champ qui s'appelle "libelle_prod" dans ma base de donnée mais que dans le datagrid je veux que ça apparaisse sous le nom de "Nom du produit".

    Merci d'avance pour votre aide
    lundi 26 octobre 2009 16:52
  • Bonjour,

    Vous pouvez changer le titre des colonnes via :
    monDataGrid.Columns(0).Text = "Nom du produit"

    Où "0" est le numéro de la colonne commençant par 0 dans votre DataGridView.

    Cordialement
    Gilles TOURREAU - MVP C# - Architecte .NET/Consultant/Formateur
    • Marqué comme réponse Takumii mardi 27 octobre 2009 18:23
    • Non marqué comme réponse Takumii mardi 27 octobre 2009 18:26
    lundi 26 octobre 2009 20:29
    Modérateur
  • Bonsoir,

    Il se trouve que j'utilise un DataGrid et non un DataGridView. Donc columns n'existe pas pour mon DataGrid.
    mardi 27 octobre 2009 18:27
  • Salut Takumii,

    es-ce vraiment nécessaire pour vous d'utiliser un DataGrid? Le DataGridView est le remplacant du DataGrid car ce dernier était légèrement problématique et bogué!
    Microsoft MVP C# :: mongeon.devrpm.ca
    mardi 27 octobre 2009 19:55
    Modérateur
  • Bonjour,

    Takumii, utilise Visual Studio 2003, il n'a donc pas vraiment le choix...
    Je ne sais plus comment on peut changer le nom des colonnes d'un DataGrid, cependant vous pouvez utilisez des alias dans votre requête SQL :

    SELECT libelle_prod AS [Libellé du produit] FROM MaTable

    Normalement, le nom de la colonne affichée, devrait être celui de l'alias.

    Cordialement
    Gilles TOURREAU - MVP C# - Architecte .NET/Consultant/Formateur
    • Marqué comme réponse Takumii mardi 27 octobre 2009 20:27
    mardi 27 octobre 2009 20:07
    Modérateur
  • Bonsoir,

    Merci pour vos réponses cela va m'aider à avancer. Je pense que je vais mettre des alias sur ma requête comme le suggère Gilles.

    Sinon oui j'avais pensé utiliser un DataGridView plutôt qu'un DataGrid mais comme il s'agit d'une application pour des examens, et que l'établissement ou je le passerais sera sous Visual Studio 2003 je n'ai pas trop le choix, malheureusement........

    Merci
    mardi 27 octobre 2009 20:27