Transfert de donnée d'une datagridview à une autres F1, F2

Résolu/Fermé
geralson Messages postés 14 Date d'inscription mardi 30 avril 2013 Statut Membre Dernière intervention 20 juin 2013 - 30 avril 2013 à 13:43
geralson Messages postés 14 Date d'inscription mardi 30 avril 2013 Statut Membre Dernière intervention 20 juin 2013 - 8 mai 2013 à 14:01
Bonjour,
J'ai deux datadridview ( datagridview1 vide dans Form1 et datagridview2 affichant quelques éléments de la DB dans Form2).
Un bouton "ajouter" sur Form1 et un bouton "selectionner" sur Form2.


Mon désire est que si je clique sur un bouton ajouter dans Form1, j'ouvre Form2. Lorsque je selectionne une ligne de datagridview2 et que je clique sur le bouton "selectionner " cette ligne s'affichera dans la datagridview1 de Form1 et disparaitra dans datagridview2 (Form2).

Même si je clique encore sur "Ajouter" j'arrive à faire la même chose.

Merci pour votre aide
A voir également:

13 réponses

Hxyp Messages postés 401 Date d'inscription vendredi 28 janvier 2011 Statut Membre Dernière intervention 27 avril 2014 54
1 mai 2013 à 16:45
Bonjour, passez en argument de Form2 le Form1 pour pouvoir y accéder en retour et dans Form1 mettez en public son datagridview pour y accéder à partir de Form2
0
tsri_badr_esgi Messages postés 524 Date d'inscription samedi 21 mars 2009 Statut Membre Dernière intervention 26 mai 2014 9
Modifié par tsri_badr_esgi le 3/05/2013 à 01:43
les evenement et le delegué servent bien le passage des données entre les form.
0
geralson Messages postés 14 Date d'inscription mardi 30 avril 2013 Statut Membre Dernière intervention 20 juin 2013
6 mai 2013 à 16:26
merci pour vos réponses mais c'est pas vraiment ca mon probleme. quand je selectionne un élement il s'affiche. Mais quand je sélectionne un autre l'ancien est écrasé. Or je veux remplir la datagridview Vente2.grid
Voici un bout de code de la selection

//Vente2 est un forme

int id = int.Parse(dataGridView1.SelectedRows[0].Cells[0].Value.ToString());
GooglaOneErpEntities4 ab = new GooglaOneErpEntities4();

var query = from b in ab.Taxes
where b.idTaxes == id
select new { b.nomTaxe, b.codeTTaxe, b.actif };
var users = query.ToList();
Vente2.grid.DataSource = users;
ab.SaveChanges();
dataGridView1.Rows.RemoveAt(dataGridView1.SelectedRows[0].Index);
Merci pour votre aide
0
tsri_badr_esgi Messages postés 524 Date d'inscription samedi 21 mars 2009 Statut Membre Dernière intervention 26 mai 2014 9
6 mai 2013 à 23:57
corrige moi si je comprend pas.

alors ce code se situe dans la bouton Selectionner de la Form2.
Vente2 est la Form 1 a la quel tu veut passer les Row pour remplir sa propre grid.
dataGridWiew1 se situe dans Form2 (le source des donée a passer ).

si oui.
comment la form2 connaitre Vente2 .chaque fois tu instancier Vente2 ou quoi vraiment.?

plus de code aide a comprendre.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
geralson Messages postés 14 Date d'inscription mardi 30 avril 2013 Statut Membre Dernière intervention 20 juin 2013
7 mai 2013 à 09:58
bjr, oui ce code se trouve ds le bouton "sélectionné " de Form2 et Vente2=Form1; dATAGRIDVIEW1 se situe ds FOrm2 et la source de donnée est la base de donnée.
A chaque fois que je veux ajouter une ligne à la datagridview de Form1 je dois cliquer sur le bouton "ajouter " de Form1. Et dans la datagridview1de la forme vente2 je ne doit plus retrouver les lignes déjà sélectionnées auparavant et qui se trouve dans l'autre datagridview.

Dans "ajouter" j'ai le code suivant:

Form g = new Form2();
g.Show();

Merci encore pour l'intérêt et pour votre aide
0
tsri_badr_esgi Messages postés 524 Date d'inscription samedi 21 mars 2009 Statut Membre Dernière intervention 26 mai 2014 9
8 mai 2013 à 08:44
il est vraiment defficile a comprendre comment la form 2 connaitre la form 1 dans tes examples mais apparament tu cree une nouvel inctance de Form1 a chaque fois tu clique sur Selectionner(une nouvel reference ) alors c'est normal que un seul row qui est ajouté

en tous cas voila une solution parmi d'autre en utilisant les event et les delegate:

supposant j'ai :
Form1 + Datagridform1+ buttonAjouter.
Form2 + Datagridform2+buttonSelectionner.

Datagridform2 est remplir par une base de donne.
moi j'ai dans cette example quatre columns dans les deux grids.

voila le code de chaque form:

Form1.cs
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace passingbetweengrids
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void ButtonAjouter_Click(object sender, EventArgs e)
        {
            Form2 frm2= new Form2();
            frm2.Sender += new Form2.SendData(frm2_Sender);
            frm2.Show();
        }

        void frm2_Sender(object data)
        {
            string[] arrayrecu = (string[])data;
            DatagridForm1.Rows.Add(arrayrecu);
        }
    }
}




Form2.cs
<code>
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace passingbetweengrids
{
public partial class Form2 : Form
{
public delegate void SendData(object data);
public event SendData Sender;
public Form2()
{
InitializeComponent();
}

private void Form2_Load(object sender, EventArgs e)
{
// TODO: cette ligne de code charge les données dans la table 'emailDataSet.emails'. Vous pouvez la déplacer ou la supprimer selon vos besoins.
this.emailsTableAdapter.Fill(this.emailDataSet.emails);

}

private void ButtonSelectionner_Click(object sender, EventArgs e)
{
string[] array = new string[4];
array[0]=DatagridForm2.CurrentRow.Cells[0].Value.ToString();
array[1]=DatagridForm2.CurrentRow.Cells[1].Value.ToString();
array[2]=DatagridForm2.CurrentRow.Cells[2].Value.ToString();
array[3] = DatagridForm2.CurrentRow.Cells[3].Value.ToString();
this.Sender(array);
this.Close();
}
}
}

</code

comme j'ai dis il y'a d'autre solution bien sure par example:
creer un autre constructeur dans la form1 qui accepte des parameater comme ce le array dans l'exmple ci-dessus.

mais je t'invite a comprendre les evenement et les delegats.personnelement sauve ma vie dan le passage des infos entre les forms.

happy coding
0
geralson Messages postés 14 Date d'inscription mardi 30 avril 2013 Statut Membre Dernière intervention 20 juin 2013
8 mai 2013 à 10:25
merci bcp pour ton aide je vais le tester de suite
0
geralson Messages postés 14 Date d'inscription mardi 30 avril 2013 Statut Membre Dernière intervention 20 juin 2013
8 mai 2013 à 12:02
merci beaucoup tsri_badr_esgi je l'ai testé et ca marche .
Mais j'ai un autre souci.
Mon souhait est que lorsque j'ajoute une ligne au datagridview1 de la Form1 je ne dois plus la retrouver dans datagridview2 quand je clique sur le boutton Ajouter de la form1. ie elle doit etre suprimé ou cachée.
Merci encore pour ton aide
0
tsri_badr_esgi Messages postés 524 Date d'inscription samedi 21 mars 2009 Statut Membre Dernière intervention 26 mai 2014 9
8 mai 2013 à 12:47
tu veut affecter aussi la base du donnée et supprime le Row qui étais juste ajouté a la datagrid du Form1?
Si oui:
En general il faut juste crée une requête SQL qui vas affecter la base du donnée (au niveau de la bouton Selectionner avant la fermeture du Form2)
j'ai noté ce ligne dans ta deuxieme reponse:
GooglaOneErpEntities4 ab = new GooglaOneErpEntities4();


tu utilise EntityFramework ou LinqToSql Entities? (.dbml ou .edmx)
0
geralson Messages postés 14 Date d'inscription mardi 30 avril 2013 Statut Membre Dernière intervention 20 juin 2013
8 mai 2013 à 12:55
j'utilise entitéframework, je veux juste supprimer les lignes déja selectionnée dans la datagridview2 (pas ds la base de donnée juste ne plus les voir dans la datagridview2)
0
tsri_badr_esgi Messages postés 524 Date d'inscription samedi 21 mars 2009 Statut Membre Dernière intervention 26 mai 2014 9
8 mai 2013 à 13:19
d'abord,même si on supprime un row . si a chaque fois la form2 est fermé apres l'appui sur la bouton Selectionner,,et quand on click une autre fois sur la bouton ajouter ça va creer une nouvelle form2 qui sera rempli nouvellement avec la base de donnée (car le source n'est pas touché).

mais si on laisse la Form2 ouvert il'ya beaucoup de possibilité.par exemple:
ajouter ces ligne a la bouton selectionner.
 foreach (DataGridViewCell item in DatagridForm2.SelectedCells)
            {
                DatagridForm2.Rows.RemoveAt(item.RowIndex);
            }


et commenter le ligne:
//this.Close()

0
geralson Messages postés 14 Date d'inscription mardi 30 avril 2013 Statut Membre Dernière intervention 20 juin 2013
8 mai 2013 à 13:34
OUi tu as parfaitement raison. Quand je laisse la form2 ça supprime. Mais les client est roi s'il desire fermer et ajouter une autre ligne tu vois un peu?
Que penses tu de cette idée?

Dans mon boutton ajouter je met ce code:

je crée une liste de la première colonne de de ma datagridview1 et une liste de ma datagridview2
ensuite je parcoure en comparant leurs elements.
Si je trouve qu'un element de datagridview1 == datagridview2 je supprime la ligne correpsondante
0
geralson Messages postés 14 Date d'inscription mardi 30 avril 2013 Statut Membre Dernière intervention 20 juin 2013
8 mai 2013 à 14:01
waiiiiiiiii l'idée à marché. merci beaucoup pour ton aide.
voici un bout de code:


Dans le bouton ajouter


Form g = new vue.Vente.Ajoutertaxe();
g.Show();
List<string> l = new List<string>();
for (int i = 0; i < Ajoutertaxe.t.RowCount; i++)
{
l.Add(Ajoutertaxe.t.Rows[i].Cells[1].Value.ToString());
//liste.Add(new Taxe(7252, "dfgf", "nbhnj", true));
}
if (Vente2.s.RowCount > 0)
{
List<string> le = new List<string>();
for (int k = 0; k < Vente2.s.RowCount; k++)
{
le.Add(Vente2.s.Rows[k].Cells[1].Value.ToString());
//liste.Add(new Taxe(7252, "dfgf", "nbhnj", true));
}



//List<string> li = new List<string>();

for (int j = 0; j < Ajoutertaxe.t.RowCount; j++)
{
for (int i = 0; i < le.Count; i++)
{

if (l[j].Equals(le[i]))
{
//Ajoutertaxe.t.Rows.RemoveAt(0);
Ajoutertaxe.t.CurrentCell = null;
Ajoutertaxe.t.Rows[j].Visible = false;

}
else
{
Ajoutertaxe.t.Update();
}

}

}


Dans le bouton selectionner

Vente2.s.Rows.Insert(0, dataGridView1.SelectedRows[0].Cells[0].Value.ToString(), dataGridView1.SelectedRows[0].Cells[1].Value.ToString(), dataGridView1.SelectedRows[0].Cells[2].Value.ToString(), dataGridView1.SelectedRows[0].Cells[3].Value.ToString());
dataGridView1.Rows.RemoveAt(dataGridView1.SelectedRows[0].Index);
0