Ajouter un controle dans l'onglet via le code

Résolu
Souliabdo Messages postés 186 Date d'inscription mercredi 14 mars 2007 Statut Membre Dernière intervention 11 avril 2011 - 9 juin 2009 à 15:20
Souliabdo Messages postés 186 Date d'inscription mercredi 14 mars 2007 Statut Membre Dernière intervention 11 avril 2011 - 10 juin 2009 à 14:29
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

krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
9 juin 2009 à 15:47
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 ! -
3
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
9 juin 2009 à 16:24
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 ! -
3
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
9 juin 2009 à 18:10
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 ! -
3
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
10 juin 2009 à 10:54
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 ! -
3

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

Posez votre question
Souliabdo Messages postés 186 Date d'inscription mercredi 14 mars 2007 Statut Membre Dernière intervention 11 avril 2011 2
9 juin 2009 à 15:58
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" /??>
0
Souliabdo Messages postés 186 Date d'inscription mercredi 14 mars 2007 Statut Membre Dernière intervention 11 avril 2011 2
9 juin 2009 à 16:41
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
0
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
9 juin 2009 à 17:27
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 ! -
0
Souliabdo Messages postés 186 Date d'inscription mercredi 14 mars 2007 Statut Membre Dernière intervention 11 avril 2011 2
9 juin 2009 à 17:44
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" /??>
 
0
Souliabdo Messages postés 186 Date d'inscription mercredi 14 mars 2007 Statut Membre Dernière intervention 11 avril 2011 2
10 juin 2009 à 10:32
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  
0
Souliabdo Messages postés 186 Date d'inscription mercredi 14 mars 2007 Statut Membre Dernière intervention 11 avril 2011 2
10 juin 2009 à 11:28
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 …
0
Souliabdo Messages postés 186 Date d'inscription mercredi 14 mars 2007 Statut Membre Dernière intervention 11 avril 2011 2
10 juin 2009 à 11:46
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
0
Souliabdo Messages postés 186 Date d'inscription mercredi 14 mars 2007 Statut Membre Dernière intervention 11 avril 2011 2
10 juin 2009 à 14:29
<?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 ???
0
Rejoignez-nous