Creer un UserControl contenant un Datagridview [Résolu]

ducker88 277 Messages postés lundi 9 février 2004Date d'inscription 4 mai 2008 Dernière intervention - 18 août 2006 à 12:03 - Dernière réponse : ducker88 277 Messages postés lundi 9 février 2004Date d'inscription 4 mai 2008 Dernière intervention
- 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
LUDINSKI 441 Messages postés mardi 2 décembre 2003Date d'inscription 22 mai 2012 Dernière intervention - 19 août 2006 à 16:19
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 !!

Merci LUDINSKI 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 87 internautes ce mois-ci

Commenter la réponse de LUDINSKI
Meilleure réponse
cs_Bidou 5507 Messages postés dimanche 4 août 2002Date d'inscription 20 juin 2013 Dernière intervention - 19 août 2006 à 18:51
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

Merci cs_Bidou 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 87 internautes ce mois-ci

Commenter la réponse de cs_Bidou
ducker88 277 Messages postés lundi 9 février 2004Date d'inscription 4 mai 2008 Dernière intervention - 18 août 2006 à 12:22
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
cs_Bidou 5507 Messages postés dimanche 4 août 2002Date d'inscription 20 juin 2013 Dernière intervention - 18 août 2006 à 13:41
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
ducker88 277 Messages postés lundi 9 février 2004Date d'inscription 4 mai 2008 Dernière intervention - 18 août 2006 à 13:59
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
cs_Bidou 5507 Messages postés dimanche 4 août 2002Date d'inscription 20 juin 2013 Dernière intervention - 18 août 2006 à 14:07
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
ducker88 277 Messages postés lundi 9 février 2004Date d'inscription 4 mai 2008 Dernière intervention - 18 août 2006 à 14:27
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
cs_Bidou 5507 Messages postés dimanche 4 août 2002Date d'inscription 20 juin 2013 Dernière intervention - 18 août 2006 à 15:22
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
ducker88 277 Messages postés lundi 9 février 2004Date d'inscription 4 mai 2008 Dernière intervention - 18 août 2006 à 15:39
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
cs_Bidou 5507 Messages postés dimanche 4 août 2002Date d'inscription 20 juin 2013 Dernière intervention - 19 août 2006 à 09:44
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
ducker88 277 Messages postés lundi 9 février 2004Date d'inscription 4 mai 2008 Dernière intervention - 19 août 2006 à 11:03
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
cs_Bidou 5507 Messages postés dimanche 4 août 2002Date d'inscription 20 juin 2013 Dernière intervention - 19 août 2006 à 11:11
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
ducker88 277 Messages postés lundi 9 février 2004Date d'inscription 4 mai 2008 Dernière intervention - 19 août 2006 à 12:51
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
cs_Bidou 5507 Messages postés dimanche 4 août 2002Date d'inscription 20 juin 2013 Dernière intervention - 19 août 2006 à 13:17
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
ducker88 277 Messages postés lundi 9 février 2004Date d'inscription 4 mai 2008 Dernière intervention - 19 août 2006 à 14:04
0
Merci
Super merci je teste ca des que possible et je te tiens au courant.

duck88
Commenter la réponse de ducker88
ducker88 277 Messages postés lundi 9 février 2004Date d'inscription 4 mai 2008 Dernière intervention - 19 août 2006 à 23:53
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
cs_Bidou 5507 Messages postés dimanche 4 août 2002Date d'inscription 20 juin 2013 Dernière intervention - 20 août 2006 à 10:42
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
ducker88 277 Messages postés lundi 9 février 2004Date d'inscription 4 mai 2008 Dernière intervention - 20 août 2006 à 11:02
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.