none
Mise à jour automatique gridView RRS feed

  • Question

  • Plop,

     

    Lors d'une modification, comment faire pour que le dataGridView se mette à jour auto sans que l on aie a recharger la form?

     

    Meilleures salutations

     

    Supprimes les logs de ton ajax necko, lol :/ désolé :/

    vendredi 18 avril 2008 08:50

Réponses

  • Heu tu veux te lancer dans l'observer pour ça ?

     

    Bon si tu veux regarder les pattern jette un coup d'oeil à ce site c'est ma référence:

    http://www.dofactory.com/Patterns/Patterns.aspx

     

    Je ne suis pas sur néanmoins que tu ais vraiment besoin de cette artillerie pour ton problème (et pourtant je suis un fan des patterns)

     

    En fait ton problème est que lorsque les fenêtres (détail et edit) se referme le formulaire principal se mettent à jour?

     

    Bon si c'est ça il y a 2 choses à faire:

    1- remplacer les show par des ShowDialog car c'est le seul moyen que ce formulaire "attende"

    2- appliquer ce que suggérait Papy Normand à savoir updater ta source.

    Pour ce faire tu prends le code qui est dans frmViewRecette_Load et tu le mets dans une fonction private (genre private void DatabaseReload() )

    Ensuite après les ShowDialog tu appelles cette nouvelle fonction et tadam ton grid sera rafraichit!

     

    Je te conseille de jeter un coup d'oeil à singleton pour réfléchir à comment database.cs pourrrait être réécrit (c'est une des pistes de nettoyage de ton code que je voulais te suggérer depuis un moment)

    lundi 5 mai 2008 07:24

Toutes les réponses

  •  

    Pour ton problème il suffit de recopier le code qui initialise le contenu de la grid dans une fonction à part qui sera appelé en retour du myshowDialog (arg c'est pour ça que j'avais dit qu'il fallait qu'on pense à surcharger le ShowDialog)

     

    Bon remodifions le MyShowDialog().

     

    Commence par renommer MyShowDialog en MyInitDialog et enlève la dernière ligne à l'intérieur (celle qui fait this.ShowDialog)

     

    Puis dans le code principal tu remplaces

    frm2.MyShowDialog par :

    frm2.MyInitDialog();

    frm2.ShowDialog();

     

    Faudra rajouter des tests sur le retour de ShowDialog (Je t'ai déjà expliqué y a pas si longtemps je crois) mais c'est pas urgent (on va considérer que le résultat est bien modifié)

     

    Ensuite après ce ShowDialog tu appelles ta fonction qui recharge le datagrid (celle décrite au début)

     

    Est ce clair ?

    vendredi 18 avril 2008 11:38
  • Pas vraiment, mais c'est pas le plus urgent Wink

     

    vendredi 18 avril 2008 11:53
  • Bonjour,

     

    Je suppose que la datagridview est chargée à partir d'une datatable.

    Il suffit de recharger la datagridview avec la datable

    dgv1.DataSource = datatable;

    et ce dans l'événement de traitement des modifications

     

    Bonne journée

    mardi 22 avril 2008 15:50
  • Ce n'est pas la meme fenetre xD comment dire à la fenetre 2 de mettre à jour le dataGrid dans la fenetre 1?

     

    mercredi 23 avril 2008 05:33
  • Bonsoir,
    As tu pensé à utiliser le data Binding?
    Ici tu trouvera un exemple qui pourrait bien te servir à faire ce que tu souhaites si j'ai bien comprit ton problème.
    Il s'agit simplement de l'application du design pattern Observateur qui permet d'indiquer automatiquement à un élément que sa source de donnée a été modifié et qu'il faut donc qu'il se remette à jour tout seul (c'est bien ton cas non?)
    Si ça ne suffit pas décrit nous avec un exemple direct ce que tu souhaites faire.


    mercredi 30 avril 2008 23:17
  • Bonjour,

     

    J'ai trouvé ce site: http://www.design-patterns.fr et suivis le tutoriel sur l'observateur (http://www.design-patterns.fr/Observateur.html). Voilà donc que j'ai créé l'interface en c# du pattern, puis implémanté le pattern a ma form "frmViewRecette"

    public partial class frmViewRecette : ComponentFactory.Krypton.Toolkit.KryptonForm, Observateur

     

     

    Ceci dit je ne comprends pas la suite de leur tutoriel pour le cas que j'ai besoin:

     

    - frmViewRecette possède un bouton btnNewRecette

    - btnNewRecette ouvre une frmAddRecette ou l'on entre le nom de la nouvelle recette. puis on valide par un bouton

    - une fois valider, frmAddRecette se ferme et le dataGridView de frmViewRecette se met à jour.

     

    Voilà donc ou j'en suis:

     

    Code source de frmViewRecette:

    using System;

    using System.Collections.Generic;

    using System.ComponentModel;

    using System.Data;

    using System.Drawing;

    using System.Text;

    using System.Windows.Forms;

    using ComponentFactory.Krypton.Toolkit;

    namespace TheProject

    {

    public partial class frmViewRecette : ComponentFactory.Krypton.Toolkit.KryptonForm, Observateur

    {

    public frmViewRecette()

    {

    InitializeComponent();

    }

    private void toolStripButton1_Click(object sender, EventArgs e)

    {

    frmNewRecette _frmNewRecette = new frmNewRecette();

    _frmNewRecette.Show();

    }

    private void frmViewRecette_Load(object sender, EventArgs e)

    {

    dataBase mydatabase = new dataBase("localhost", "theproject", "root");

    bool connectionStatus = mydatabase.SelectArome("SELECT * FROM xdb_recette;");

    kryptonDataGridView1.DataSource = mydatabase.myDataTable;

    kryptonDataGridView1.Columns["name"].HeaderText = "Nom";

    kryptonDataGridView1.Columns["id"].Visible = false;

    kryptonDataGridView1.Columns["price"].Visible = false;

    kryptonDataGridView1.Refresh();

    }

    private void toolStripButton2_Click(object sender, EventArgs e)

    {

    frmEditRecette _frmEditRecette = new frmEditRecette();

    _frmEditRecette.Show();

    }

    private void toolStripButton4_Click(object sender, EventArgs e)

    {

    dataBase mydatabase = new dataBase("localhost", "theproject", "root");

    bool connectionDeleteStatus = mydatabase.updateAll("DELETE FROM xdb_recette WHERE id=" + kryptonDataGridView1.CurrentRow.Cells["Id"].Value.ToString() + ";");

    bool connectionDeleteStatus1 = mydatabase.updateAll("DELETE FROM xdb_recetteComposant WHERE recette=" + kryptonDataGridView1.CurrentRow.Cells["Id"].Value.ToString() + ";");

    if (connectionDeleteStatus == false)

    {

    //remplacer cette ligne par une écriture dans un log à l'avenir

    }

    MessageBox.Show("La recette à été supprimé avec succès", "Supression de recette", MessageBoxButtons.OK, MessageBoxIcon.Information);

    kryptonDataGridView1.Refresh();

    }

    private void btnViewDetail_Click(object sender, EventArgs e)

    {

    frmViewDetailRecette _frmViewDetailRecette = new frmViewDetailRecette();

    _frmViewDetailRecette.IdRecette = (int)kryptonDataGridView1.CurrentRow.Cells["Id"].Value;

    if (_frmViewDetailRecette.InitializeData() == true)

    {

    _frmViewDetailRecette.Show();

    }

    }

    }

    }

     

     

    Code source de mon interface Observateur:

    using System;

    using System.Collections.Generic;

    using System.Text;

    namespace TheProject

    {

    interface Observateur

    {

    public interface actualiser

    {

    public void actualiser(Observateur o);

    }

    public interface Observable

    {

    public void ajouterObservateur(Observateur o);

    public void supprimerObservateur(Observateur o);

    public void notifierObservateur(Observateur o);

    }

    }

    }

     

     

    Qu'est-ce que je dois faire maintenant? Comment?

     

    Meilleure salutation

    lundi 5 mai 2008 07:06
  • Heu tu veux te lancer dans l'observer pour ça ?

     

    Bon si tu veux regarder les pattern jette un coup d'oeil à ce site c'est ma référence:

    http://www.dofactory.com/Patterns/Patterns.aspx

     

    Je ne suis pas sur néanmoins que tu ais vraiment besoin de cette artillerie pour ton problème (et pourtant je suis un fan des patterns)

     

    En fait ton problème est que lorsque les fenêtres (détail et edit) se referme le formulaire principal se mettent à jour?

     

    Bon si c'est ça il y a 2 choses à faire:

    1- remplacer les show par des ShowDialog car c'est le seul moyen que ce formulaire "attende"

    2- appliquer ce que suggérait Papy Normand à savoir updater ta source.

    Pour ce faire tu prends le code qui est dans frmViewRecette_Load et tu le mets dans une fonction private (genre private void DatabaseReload() )

    Ensuite après les ShowDialog tu appelles cette nouvelle fonction et tadam ton grid sera rafraichit!

     

    Je te conseille de jeter un coup d'oeil à singleton pour réfléchir à comment database.cs pourrrait être réécrit (c'est une des pistes de nettoyage de ton code que je voulais te suggérer depuis un moment)

    lundi 5 mai 2008 07:24
  • Sa fonctionne ! Merci !

     

    lundi 5 mai 2008 07:43