Mise a jour automatique listbox via 2 formulaire [Résolu]

Signaler
-
 MINDONGO -
Bonjour,

Je voudrais savoir comment faire pour que lorsque j'ajoute une donnée d'un formulaire A,la listbox de mon formulaire B se mette a jour par rapport au donnée insérer dans mon formulaire A.

Merci !

17 réponses

salut,
J’imagine que c’est n’est pas les données de la table entière !!!
Il suffit de créer une fonction LISTBOX sur laquelle tu place tes codes


        void LISTBOX()
{
//ta ligne de connexion
SqlDataReader dtr;
SqlCommand command;
//svp la table est juste une illustration 
command = new SqlCommand ("select * from Service ");
command.Connection = connString;
                dtr = command.ExecuteReader();
                while (dtr.Read())
listBox1.Items.Add(dtr["NomService "].ToString   
             dtr.Close();
}
private void FormB_Load(object sender, EventArgs e)
        {
           LISTBOX ();
        }

salut,
est-ce que tu utilise un sgbd?
Messages postés
224
Date d'inscription
vendredi 26 novembre 2010
Statut
Membre
Dernière intervention
11 juin 2013
2
Bonjour,

Si ton form A est le parent de ton form B, il suffit d'envoyer les informations à ton form B via un fonction publique. Ex:
public partial class FormA : Form
{
    //initialisation
    FormB f2 = new FormB();
    f2.Show();

    private void AjoutDonnee(Object o)
    {
       //Ajout de o dans la liste du Form A
       f2.MiseAJourDonnee(o); //fonction qui traite les données dans form B
    }
}

Si tu veux de l'aide de façon plus précise, poste ta fonction d'ajout de ton form A et détaille le traitement que tu veux faire sur ton Form B
@MINDONGO : Oui,je passe par une sgbd qui m'insere les donnéees de mon formulaire A(NomService).
Je voudrais que la donnée(NomService) s'affiche directement dans ma listbox sans que j'ai a fermer le formulaire B de ma listbox pour qu'elle s'affiche.

@L0ci :

Formulaire A :

//Insertion des données de mon formulaire

SqlCommand command = new SqlCommand("INSERT INTO MATABLE")

//Mise a jour de ma liste qui ne fonctionne pas
FormB f2 = new FormB();
f2.listBox1.Refresh();

Formulaire B :
// Données de ma listbox
SqlDataAdapter custAdapter = new SqlDataAdapter("SELECT * FROM MATABLE", connString);
DataSet datas = new DataSet();
custAdapter.Fill(datas, "DONNES1");
custAdapter.Fill(datas, "DONNES2");

foreach (DataRow row in datas.Tables[0].Rows)
{
if (row["DONNES1"].ToString() != "")
{
listBox1.Items.Add(row["DONNES2"].ToString());
}

}
Messages postés
224
Date d'inscription
vendredi 26 novembre 2010
Statut
Membre
Dernière intervention
11 juin 2013
2
Bonjour,

Est ce que c'est normal que tu (re)instancies ton FormB juste avant le refresh? Si ton formB est déjà ouvert il faut que tu accèdes à l'instance en cours de ton form.
Je l'instancie uniquement la premiére fois au niveau de l'initialisation comme tu l'as fait plus haut.
Messages postés
224
Date d'inscription
vendredi 26 novembre 2010
Statut
Membre
Dernière intervention
11 juin 2013
2
J'ai trouvé ce post la il y a peut être la solution à ton problème.
Sinon, as tu essayé d'executer le code de ton formB en pas à pas? Si oui, est-ce que la fonction est bien appelée et est ce que la listbox est bien remplie?
Oui,tout se remplit bien.Il n'y a pas de probléme pour ca.C'est juste le fait que je doit fermer la fenêtre de mon formB pour voir apparaitre la donnée que j'ai inséré de mon formA ce qui n'est vraiment pas terrible.

Je pourrais creer un bouton d'actualisation sur mon formB sinon mais c'est vraiment pas ce que je veux.
Je ne trouve pas la référence listbox.databind() et l'update ne fait rien non plus que je l'appel de mon formA.

Doit avoir un moyen d'actualiser tous ce ptit machin quand meme bon sang de bois !
Messages postés
14582
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
7 août 2020
426
Bonjour j'ai déjà fait un truc dans le style, mais je n'ai pas le code sous la main.
Je m'étais servit d'une List<T> que j'envoyais au form B en référence et ensuite j'avais mis sur chaque formulaire un databindingsource (j'ai créé un tuto là dessus et va savoir pourquoi sur de PC je ne peux pas y acceder).

Ca ce mets à jour plus ou moins tout seul et au pire tu as juste à creer une méthode de rafraichisement du formulaire B que tu appelles dans l'évenement CurrentChanged du databindingsource de A.


Whismeril
Messages postés
14582
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
7 août 2020
426
@Whismeril :Ma listbox n'es pas bindé, j'utilise une requete select pour afficher mes infos et une requete delete pour les supprimer donc je ne pense pas pouvoir utiliser le databinding source où il faudrait que je m'y penche réellement dans ces cas là et revoir tous mon formulaire.


@MINDIGO :
Même en créant une fonction,la liste ne se met pas a jour automatiquement.Il faut encore que je referme mon formulaire B pour voir apparaitre mon élément que je viens de creer.
salut,
est-ce que tu le place dans ton formulaire B
mes codes?
il faut le mettre là, car j'ai essayé avec ça chez moi quelque choses de pareille et çà marche


une fonction créer dans formulaire B
Ah,j'ai aussi oublié de préciser que mon FormB(affichage listbox) ouvre mon FormA(Ajout de donné) via un bouton.Du coup,il reste ouvert en fond et c'est surement ca qui pose probléme...

@MINDONGO : Oui,ta fonction marche très bien mais c'est le rafraichissement de la listbox lors de l'ajout qui ne se fait toujours pas, c'est ca mon probléme.
Bon ben,je viens de trouver un moyen pas terrible mais qui fonctionne.
Je lance ma fonction sur l'événement click de mon formulaire B et du coup,Il vide et reremplit ma listbox avec les éléments de ma table service.
salut,
@Damiens29, donc cava maintenant?
Oui,je te remercie :

private void F_Service_Click(object sender, EventArgs e)
        {
            // TODO: This line of code loads data into the 'gestionRDDataSet1.T_Services' table. You can move, or remove it, as needed.
        }


J'ai juste créé un évenement click qui pointe sur F_Service_Load() et qui qui rafraichi mon formulaireB,ca met donc a jour ma listbox.
C'est béte mais ca fonctionne.
J'accepte ta réponse plus haut et je te remercie encore pour ton aide.
c'est à vs que je remercie aussi

int mindongo