Creer un UserControl contenant un Datagridview

Résolu
ducker88 Messages postés 277 Date d'inscription lundi 9 février 2004 Statut Membre Dernière intervention 4 mai 2008 - 18 août 2006 à 12:03
ducker88 Messages postés 277 Date d'inscription lundi 9 février 2004 Statut Membre 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

18 réponses

LUDINSKI Messages postés 441 Date d'inscription mardi 2 décembre 2003 Statut Membre Dernière intervention 22 mai 2012 7
19 août 2006 à 16:19
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 !!
3
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 60
19 août 2006 à 18:51
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
3
ducker88 Messages postés 277 Date d'inscription lundi 9 février 2004 Statut Membre Dernière intervention 4 mai 2008
18 août 2006 à 12:22
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
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 60
18 août 2006 à 13:41
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
0

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

Posez votre question
ducker88 Messages postés 277 Date d'inscription lundi 9 février 2004 Statut Membre Dernière intervention 4 mai 2008
18 août 2006 à 13:59
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
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 60
18 août 2006 à 14:07
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
0
ducker88 Messages postés 277 Date d'inscription lundi 9 février 2004 Statut Membre Dernière intervention 4 mai 2008
18 août 2006 à 14:27
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
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 60
18 août 2006 à 15:22
La property Column retour une DataGridViewColumnCollection :

public

DataGridViewColumnCollection Columns
{

   get
   {
     
return
this.dataGridView.Columns ;
   }

}

<hr size="2" />VC# forever
0
ducker88 Messages postés 277 Date d'inscription lundi 9 février 2004 Statut Membre Dernière intervention 4 mai 2008
18 août 2006 à 15:39
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
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 60
19 août 2006 à 09:44
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
0
ducker88 Messages postés 277 Date d'inscription lundi 9 février 2004 Statut Membre Dernière intervention 4 mai 2008
19 août 2006 à 11:03
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
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 60
19 août 2006 à 11:11
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
0
ducker88 Messages postés 277 Date d'inscription lundi 9 février 2004 Statut Membre Dernière intervention 4 mai 2008
19 août 2006 à 12:51
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
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 60
19 août 2006 à 13:17
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
0
ducker88 Messages postés 277 Date d'inscription lundi 9 février 2004 Statut Membre Dernière intervention 4 mai 2008
19 août 2006 à 14:04
Super merci je teste ca des que possible et je te tiens au courant.

duck88
0
ducker88 Messages postés 277 Date d'inscription lundi 9 février 2004 Statut Membre Dernière intervention 4 mai 2008
19 août 2006 à 23:53
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
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 60
20 août 2006 à 10:42
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
0
ducker88 Messages postés 277 Date d'inscription lundi 9 février 2004 Statut Membre Dernière intervention 4 mai 2008
20 août 2006 à 11:02
C'est bel et bien une derivation du datagridview dont j'ai besoin. Merci bcp de votre aide a tous les 2.

duck88
0
Rejoignez-nous