Ajouter un controle dans l'onglet via le code [Résolu]

Signaler
Messages postés
186
Date d'inscription
mercredi 14 mars 2007
Statut
Membre
Dernière intervention
11 avril 2011
-
Messages postés
186
Date d'inscription
mercredi 14 mars 2007
Statut
Membre
Dernière intervention
11 avril 2011
-
Bonjour à tous ,

J’ai un tabcontrol dans mon formulaire je voudrais savoir comment rajouter une barre de défilement verticale (automatique) dans l’onglet
<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??> 

Ma deuxième question est comment rajouter des contrôles  (par exemple des data grid )

 Dans l’onglet 1 en passant par le code et non par le concepteur ;

 

J’ai fais :

DataGridView dgv = newDataGridView()

            this.MyTabContro.MyTabPages.

 

il me propose pas « container » pour y ajoute mon data grid

 

une idée s’il vou plaît…..

 

12 réponses

Messages postés
1860
Date d'inscription
lundi 28 novembre 2005
Statut
Modérateur
Dernière intervention
14 février 2015
48
Salut

Tout d'abord, je ne vois pas ce que tu veux dire par "rajouter une barre de défilement verticale (automatique) dans l'onglet". Tu veux que les contrôles se trouvant dans ton tabcontrol puissent défiler ? Dans ce cas, quel genre de contrôles ?

Pour la deuxième question, c'est très simple :
this.MyTabControl.TabPages[0].Controls.Add(dgv);

au cas où tu serais perdu au niveau du code mais pas du designer, tu peux regarder le code généré par le designer. Tu le trouveras dans le fichier Form1.Designer.cs. Cependant, si tu modifies ce fichier, fait très attention que des modifications soient valides, car si elles ne le sont pas, tu ne pourras plus utiliser le mode Designer.

Krimog : while (!(succeed = try())) ;
- NON, "LE BAR" n'est PAS un langage de programmation ! -
Messages postés
1860
Date d'inscription
lundi 28 novembre 2005
Statut
Modérateur
Dernière intervention
14 février 2015
48
Dans ce cas, il suffit de mettre la propriété AutoScroll de ta tabpage à true.

Krimog : while (!(succeed = try())) ;
- NON, "LE BAR" n'est PAS un langage de programmation ! -
Messages postés
1860
Date d'inscription
lundi 28 novembre 2005
Statut
Modérateur
Dernière intervention
14 février 2015
48
Bah, pour en rajouter un, monFlowLayoutPanel.Controls.Add(ceQueJeVeuxQuiSeraAutomatiquementPlace);
Et pour les manipuler : monFlowLayoutPanel.Controls[i].CeQueJeVeux

Krimog : while (!(succeed = try())) ;
- NON, "LE BAR" n'est PAS un langage de programmation ! -
Messages postés
1860
Date d'inscription
lundi 28 novembre 2005
Statut
Modérateur
Dernière intervention
14 février 2015
48
Oui, tu dois créer une nouvelle DataTable à chaque fois.
Et ce pour une raison très simple : DataTable est une classe. Son passage se fait donc par référence, et non par copie (contrairement aux structs, int, double...).
Donc quand tu fais MyDataSet.Tables.Add(dt); c'est toujours la même DataTable que tu ajoutes, et non une copie. Et puisque tu l'as déjà ajoutée au passage précédent dans la boucle, il va te générer une erreur.

De toutes façons, puisqu'il s'agit d'une référence, si C# était con et ne t'avait pas généré une erreur, en ajoutant une donnée dans une table de ton dataset, cette donnée aurait été visible dans toutes les tables, puisque tu as beau essayer de l'ajouter 1000 fois dans un dataset, c'est toujours une seule et même table.

Donc oui, tu vas devoir créer une DataTable différente à chaque fois.

Krimog : while (!(succeed = try())) ;
- NON, "LE BAR" n'est PAS un langage de programmation ! -
Messages postés
186
Date d'inscription
mercredi 14 mars 2007
Statut
Membre
Dernière intervention
11 avril 2011
2
En fait je voulait ajouter plusieurs data grid don mon tabpage[0] de ce fait j’aurais besoin d’une barre de défilement pour visualiser des data gid s’ils n’apparaissent pas  <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /??>
Messages postés
186
Date d'inscription
mercredi 14 mars 2007
Statut
Membre
Dernière intervention
11 avril 2011
2
Merci


Je vais vous embêter encore une fois,


En fait je cherche l’équivalent de group de contrôle de VB en c#



<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>
 




J’ai une liste de n élément et je voulais créer autant de data grid que ces élément pour les rajouter dans mon formulaire l’un en dessous de l’autre
Messages postés
1860
Date d'inscription
lundi 28 novembre 2005
Statut
Modérateur
Dernière intervention
14 février 2015
48
Je ne connais pas du tout VB, mais ta description semble ressembler à un FlowLayoutPanel avec un FlowDirection TopDown et un WrapContent false

Krimog : while (!(succeed = try())) ;
- NON, "LE BAR" n'est PAS un langage de programmation ! -
Messages postés
186
Date d'inscription
mercredi 14 mars 2007
Statut
Membre
Dernière intervention
11 avril 2011
2
En fait Mon idée c’est de dupliquer un contrôle data grid n fois à partir de mon code (sans le glisser déposer) et de pouvoir manipuler chaque data grid à part ??



<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>
 
Messages postés
186
Date d'inscription
mercredi 14 mars 2007
Statut
Membre
Dernière intervention
11 avril 2011
2
Bonjour,

Je voulais ajouter dans le dataset n datatables qui ont la même structure  et puis lier chaque dtatatable de mon dataset à une data grid  :
<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??> 

DataTable dt = newDataTable();

DataColumn code_rais = newDataColumn("Code Raison", typeof(string));

            code_rais.ReadOnly = true;

            DataColumn libelle = newDataColumn("Description", typeof(string));

            libelle.ReadOnly = true;

            DataColumn asuppr = newDataColumn("Asuppr", typeof(bool));

            asuppr.ReadOnly = false;

            dt.Columns.Add(code_rais);//Col 1

            dt.Columns.Add(libelle);//Col 2

            dt.Columns.Add(asuppr);//col3

 

DataSet MyDataSet = newDataSet();

//Remplir le dataset avec les datatable de meme structure

 

for (int i = 0; i < LstParam.Count; i++)

                MyDataSet.Tables.Add(dt);

           

//lier chaque datagrid avec undatatable de mon dataset

for (int i = 0; i < MyflpGrids.Controls.Count; i ++)

            {

                ((DataGridView)MyflpGrids.Controls[i]).DataSource = MyDataSetGrid.Tables[i];

            }

 

lors de l’execution je vois l’erreur suivante :

DataTable appartient déjà à ce DataSet. au niveau du premier boucle for

 

Est-ce que je doit faire un boucle pour crée a chaque fois un datatable ??

 

Une idée s’il vous paît  
Messages postés
186
Date d'inscription
mercredi 14 mars 2007
Statut
Membre
Dernière intervention
11 avril 2011
2
J’ai fais un boucle pour remplir le dataset



<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>
 





private

void initDataSet()






        {






 






for
(int i = 0; i < LstParam.Count; i++)






            {






               
DataTable dt2 = newDataTable();






               
DataColumn code_rais = newDataColumn("Code Raison", typeof(string));






                code_rais.ReadOnly = true;






               
DataColumn libelle = newDataColumn("Description", typeof(string));






                libelle.ReadOnly = true;






               
DataColumn asuppr = newDataColumn("Asuppr", typeof(bool));






                asuppr.ReadOnly = false;






                dt2.Columns.Add(code_rais);//Col 1






                dt2.Columns.Add(libelle);//Col 2






                dt2.Columns.Add(asuppr);






               

MyDataSetGrid.Tables.Add(dt2);






            }






 






//attribuer les datasources à mes datagrid





for
(int i 1; i < MyflpGrids.Controls.Count; i i + 2)






            {






                ((DataGridView)MyflpGrids.Controls[i]).DataSource = MyDataSetGrid.Tables[i];






           

}






 





Le problème est quand je modifie le premier datagrid de flowpanel le deuxième prend exactement la même modification alors q’il ont des sources de données différentes ?



 





((DataGridView)MyflpGrids.Controls[i]).DataSource = MyDataSetGrid.Tables[i];






 






…..





le deuxieme probleme est que





lors de chargement de mon formulaire le comboboxselectechaged genere l’erreur suivant :




Impossible de trouver la table 0.



Code :





private

void cmbCaracsParam_SelectedIndexChanged(object sender, EventArgs e)






        {






           
if (cmbCaracsParam.Text != "")






            {






               







this
.grdcaracsParam.DataSource = MyDataSetGrid.Tables[cmbCaracsParam.SelectedIndex];






 






malgré que j’ai défini le datatable dans la procédure privatevoid initDataSet()






 







 






merci pour votre aide …
Messages postés
186
Date d'inscription
mercredi 14 mars 2007
Statut
Membre
Dernière intervention
11 avril 2011
2
Pour l’erreur Impossible de trouver la table 0.


En fait lors du chargement du formulaire il  rempli le combobox avec des élément


Don peut être il exécute  le cmbCaracsParam_SelectedIndexChanged<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>



En fait je voualais que cette evenement s’execute quand je choisi un element du combo
Messages postés
186
Date d'inscription
mercredi 14 mars 2007
Statut
Membre
Dernière intervention
11 avril 2011
2
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /??>
 





J’ai créé une databindingsource pour chaque datagrid :




 
for (int i = 0; i < LstParam.Count; i++)






            {






               
DataTable dt2 = newDataTable(i.ToString());






               
DataColumn code_rais = newDataColumn("Code Raison", typeof(string));






                code_rais.ReadOnly = true;






               
DataColumn libelle = newDataColumn("Description", typeof(string));






                libelle.ReadOnly = true;






               
DataColumn asuppr = newDataColumn("Asuppr", typeof(bool));






                asuppr.ReadOnly = false;






             
  dt2.Columns.Add(code_rais);//Col 1






                dt2.Columns.Add(libelle);//Col 2






                dt2.Columns.Add(asuppr);






                MyDataSetGrid.Tables.Add(dt2);






            }





///////////////////////////////////////////////////////////////////





j=-1;





for
(int i 1; i < MyflpGrids.Controls.Count; i i + 2)






            {






               










               
BindingSource source = newBindingSource();






                source.DataSource = MyDataSetGrid;






                source.DataMember =(j + 1).ToString();//(j + 1).ToString();






                ((DataGridView)MyflpGrids.Controls[i]).DataSource=source;






            }






 






///////lors de l’ajout





DataRow
r2 = MyDataSetGrid.Tables[cmbCaracsParam.SelectedIndex].NewRow();






                        r2[0]=this.cmbCodeRaison.Text; //r2[0]= = colonne Code raison






                        r2[1] = this.cmbLibParam.Text;// r2[1] = = colonne Libelle (Description)






                        MyDataSetGrid.Tables[cmbCaracsParam.SelectedIndex].Rows.Add(r2);






 






mais le problème existe toujours quand je rajoute des ligne dans l’une il sera rajouter dans l’autre malgré due leur datasource son Différente



 




Une idée s’il vous plaît ???