Creer un UserControl contenant un Datagridview [Résolu]

Messages postés
277
Date d'inscription
lundi 9 février 2004
Dernière intervention
4 mai 2008
- - Dernière réponse : ducker88
Messages postés
277
Date d'inscription
lundi 9 février 2004
Dernière intervention
4 mai 2008
- 20 août 2006 à 11:02
Bonjour a tous,

Dans le but d'un projet je dois creer ujn usercontrol contenant un datagridview dans le but d'ajouter des fonctionnalité a celui-ci.
Mon soucis est que dans cet objet je dois pouvoir definir la source de données du datagrid depuis l'application qui l'utilisera (comme si j'inserai un datagridview dans mon appli).

Le soucis c'est que je ne trouve pas comment declarer un DataSource. Voici mon code qui vous aidera a comprendre ce que je veux faire :

[Category("Source données"), Browsable(true), Description("Permet de definir la source de données du datagrid")]

public /* declaration du datasource*/ monDataSource
        {
            get
            {
               return this.dataGridView1.DataSource ;
            }
            set
            {
                this.dataGridView1.DataSource = value ;
            }
        }

Pouvez vous m'aidez ?

Merci a tous
duck88
Afficher la suite 

Votre réponse

18 réponses

Meilleure réponse
Messages postés
441
Date d'inscription
mardi 2 décembre 2003
Dernière intervention
22 mai 2012
5
3
Merci
Salut duck,
Si ton userControl ne contient qu'un DataGrid et aucun autre contrôle, il te suffireai de dériver d'un DataGrid tout simplement...

En plus d'en ajouter, tu pourrais 'overrider' quelques-une de ses méthodes !!

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 121 internautes nous ont dit merci ce mois-ci

Commenter la réponse de LUDINSKI
Messages postés
5507
Date d'inscription
dimanche 4 août 2002
Dernière intervention
20 juin 2013
58
3
Merci
Ha oui effectivement, je suis parti du principe que c'était un Control complexe qui contenait, entre autre, un DataGridView.
C'est évident que si tu veux juste spécialisé ton DataGridView, il faut directement dérivé de cette classe et non pas de UserControl !

<hr size="2" />VC# forever

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 121 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_Bidou
Messages postés
277
Date d'inscription
lundi 9 février 2004
Dernière intervention
4 mai 2008
0
Merci
L'ideal en fait serait de pouvoir recuperer/modifier tous les parametres du datagridview que j'ai inserer dans mon usercontrol, est-ce possible de faire cela ?

duck88
Commenter la réponse de ducker88
Messages postés
5507
Date d'inscription
dimanche 4 août 2002
Dernière intervention
20 juin 2013
58
0
Merci
Le DataSource n'est en fait qu'un object !

public object monDataSource
        {
            get
            {
               return this.dataGridView1.DataSource ;
            }
            set
            {
                this.dataGridView1.DataSource = value ;
            }
        }

<hr size="2" />VC# forever
Commenter la réponse de cs_Bidou
Messages postés
277
Date d'inscription
lundi 9 février 2004
Dernière intervention
4 mai 2008
0
Merci
Ce que tu as mis fonctionne bien, j'ai mis cela qui fonctionne aussi :

       public BindingSource DataSource
        {
            get
            {
                return (BindingSource)this.dataGridView1.DataSource;
            }
            set
            {
                this.dataGridView1.DataSource = value;
            }
        }

duck88
Commenter la réponse de ducker88
Messages postés
5507
Date d'inscription
dimanche 4 août 2002
Dernière intervention
20 juin 2013
58
0
Merci
Ben tu peux le caster en plusieurs chose, si tu sais que tu attends un ArrayList par exemple, tu peux écrire :

   public ArrayList DataSource
        {
            get
            {
                return (ArrayList)this.dataGridView1.DataSource;
            }
            set
            {
                this.dataGridView1.DataSource = value;
            }
        }

<hr size="2" />VC# forever
Commenter la réponse de cs_Bidou
Messages postés
277
Date d'inscription
lundi 9 février 2004
Dernière intervention
4 mai 2008
0
Merci
Merci pour ton aide, j'ai un autre soucis sur lequel tu pourra certainement m'aider :
Comment recuprerer le parametrages des colonnes du datagridview ? J'ai essayé ceci :

public Object columns
        {
            get
            {
                return this.dataGridView1.Columns ;
            }
            set
            {
                this.dataGridView1.Columns.Clear() ;
               
            }
        }

Mais cela ne fonctionne absolument pas, aurait tu la solution ?

duck88
Commenter la réponse de ducker88
Messages postés
5507
Date d'inscription
dimanche 4 août 2002
Dernière intervention
20 juin 2013
58
0
Merci
La property Column retour une DataGridViewColumnCollection :

public

DataGridViewColumnCollection Columns
{

   get
   {
     
return
this.dataGridView.Columns ;
   }

}

<hr size="2" />VC# forever
Commenter la réponse de cs_Bidou
Messages postés
277
Date d'inscription
lundi 9 février 2004
Dernière intervention
4 mai 2008
0
Merci
Oui je sais, mais cet property est en lecture seule, et ont ne peu pas definir le CellType dans les proprietes de chaque colonne

duck88
Commenter la réponse de ducker88
Messages postés
5507
Date d'inscription
dimanche 4 août 2002
Dernière intervention
20 juin 2013
58
0
Merci
Ben dans ce cas tu passes le CellType. Si t'en veux pour chaque colonnes, tu passes une collection de CellType (par ex. List<CellType>) puis tu fais les différentes affectations dans le 'set' de ta property.

<hr size="2" />VC# forever
Commenter la réponse de cs_Bidou
Messages postés
277
Date d'inscription
lundi 9 février 2004
Dernière intervention
4 mai 2008
0
Merci
L'ideal, si c'est possible,  serait d'avoir toutes les property du datagrid dans les property de l'usercontrol.
Est ce possible de faire cela ?

duck88
Commenter la réponse de ducker88
Messages postés
5507
Date d'inscription
dimanche 4 août 2002
Dernière intervention
20 juin 2013
58
0
Merci
Non, ce n'est pas possible tel quel.
La seule solution qui se rapproche le plus à ça, et de faire une property public qui retourne directement le datagrid en entier (à mettre donc dans le userControl) :

public DataGridView DgGridView
{
   get { return this._dgGridV; }
   set { this._dgGridV = vallue; }
}


<hr size="2" />




VC# forever
Commenter la réponse de cs_Bidou
Messages postés
277
Date d'inscription
lundi 9 février 2004
Dernière intervention
4 mai 2008
0
Merci
C'est ce qu'il me faut, mais quand j'utilise mon usercontrol dans une autre appli et que je veux modifier les colonnes j'ai l'erreur suivante :
"La réference d'objet n'est pas definit a une instance d'un objet"

duck88
Commenter la réponse de ducker88
Messages postés
5507
Date d'inscription
dimanche 4 août 2002
Dernière intervention
20 juin 2013
58
0
Merci
Bon j'ai fait un test très très rapide.
Un userControl comme ça (juste avec un datagridview dessus):

public
partial
class
UserControl1 :
UserContro
{
  
public UserControl1()
   {
      InitializeComponent();
   }

   public
DataGridView Test
   {
     
get {
return
this.dataGridView1; }
     
set {
this.dataGridView1 =
value; }
   }
}
Puis, dans la form de test :

public
partial
class
Form1 :
Form
{
  
DataTable dt =
new
DataTable();
  
public Form1()
   {
      InitializeComponent();
      dt.Columns.Add(
"int",
typeof(
int));
      dt.Columns.Add(
"string",
typeof(
string));
      dt.Rows.Add(3,
"sting");
      dt.Rows.Add(33,
"stding");
      dt.Rows.Add(23,
"stdsaing");
     
this.userControl11.Test.DataSource = dt;
   }

  
private
void button1_Click(
object sender,
EventArgs e)
   {
      dt.Rows.Add(22,
"vingts-deux");
     
this.userControl11.Test.DefaultCellStyle.BackColor =
Color.Red;
   }
}

Et ça fonctionne sans soucis.

<hr size="2" />VC# forever
Commenter la réponse de cs_Bidou
Messages postés
277
Date d'inscription
lundi 9 février 2004
Dernière intervention
4 mai 2008
0
Merci
Super merci je teste ca des que possible et je te tiens au courant.

duck88
Commenter la réponse de ducker88
Messages postés
277
Date d'inscription
lundi 9 février 2004
Dernière intervention
4 mai 2008
0
Merci
Je suis d'accord pour le control derivé, c'est ce qu'il me faut, mais comment inseré le composant que j'ai modifié dans ma form a partir du .cs que j'ai créé ?

duck88
Commenter la réponse de ducker88
Messages postés
5507
Date d'inscription
dimanche 4 août 2002
Dernière intervention
20 juin 2013
58
0
Merci
Bon finalement tu dérives de DataGridView ou de UserControl?

Visual Studio 2005 insére directement les nouveaux Control dans la bar d'outils, tu n'auras plus qu'à le draguer sur ta form, tout comme tu le fais avec un bouton.
Avec Visual Studio 2003, si mes souvenirs sont bons, faut faire un clique droit sur la barre d'outil, puis "ajouter nouveau" ou qqch comme ça.

<hr size="2" />VC# forever
Commenter la réponse de cs_Bidou
Messages postés
277
Date d'inscription
lundi 9 février 2004
Dernière intervention
4 mai 2008
0
Merci
C'est bel et bien une derivation du datagridview dont j'ai besoin. Merci bcp de votre aide a tous les 2.

duck88
Commenter la réponse de ducker88

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.