begin process at 2012 02 10 05:57:22
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C#

 > 

Windows

 > 

Autre

 > 

Afficher une collection dans un datagridview


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Afficher une collection dans un datagridview

mardi 10 avril 2007 à 15:18:53 | Afficher une collection dans un datagridview

thorgal1612

Bonjour,

Mon problème est le suivant. Je cherche à afficher dans un datagridview les différents éléments d'une collection d'objets "LigneFactureClass". J'utilise donc le bindingsource auquel j'affecte ma collection.
Lorsque j'exécute mon appli, mon datagridview est bien chargé avec les éléments de ma collection.
Mon problème est que les objets de ma collection possèdent un attribut d'un type non primitif (type ProduitClass que j'ai créé)

Mon datagridview affiche bien les valeurs des attributs simples (n° facture, n° ligne) mais pour mon attribut de type ProduitClasse, il affiche "ProduitClass".
Comment faire pour afficher la valeur de l'attribut Produit_cod de mon attribut de type ProduitClasse

public class ProduitClass
    {
        private System.String _Produit_cod = "";
        private System.String _Produit_ref = "";
        private System.String _Produit_des = "";
        ...
        public String Produit_cod {...}
        public String Produit_ref {...}
        public String Produit_des {...}

     }

J'ai une classe LigneFacture :
public class LigneFactureClass
{
       private System.UInt32 _DetailId = 0;
       private System.UInt32 _FactureId = 0;
       private Produit _Produit = null;

       public System.UInt32 _DetailId {...}
       public System.UInt32 _FactureId {...}
       public ProduitClass Produit {...}      
...
}


J'espère avoir été assez clair, merci

Si quelqu'un à des exemples concrets sur le bindingsource (sans passer par ADO.Net, Dataset ...), je suis preneur

Merci à tous

 

mardi 10 avril 2007 à 16:44:15 | Re : Afficher une collection dans un datagridview

sebmafate

Membre Club Administrateur CodeS-SourceS
dans ta classe ProduitClass, il faut surcharger la méthode ToString()

Tu peux aussi créer un TypeConverter pour ta classe.


Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]
jeudi 19 avril 2007 à 17:45:43 | Re : Afficher une collection dans un datagridview

thorgal1612

Réponse acceptée !
Bonjour

J'ai trouvé une solution, je ne sais pas si c'est la plus simple (je pense pas mais ça marche).
J'utilise les PropertyDescriptor. J'ai vu ça dans les WebCast de Mistu sur le DataBinding Avancé.

En gros, j'ai créer un MonObjetBindingSource propre à mon Objet (bien mon bindinsource dérive de BindingSource) dans lequel j'ai ajouté de nouvelles propriétés

Je vous mets un exemple :

Ma classe CustomClientBindingSource

class CustomClientBindingSource : BindingSource
{

public delegate object PropertyEventHandler(object sender, object row, string propertyName, Type propertyType);
public event PropertyEventHandler PropertyEval;

protected internal object OnPropertyEval(object row, string propertyName, Type propertyType)
{
if (!DesignMode)
{
if (PropertyEval != null)
{
return PropertyEval(this, row, propertyName, propertyType);
}
}
return null;
}

public override System.ComponentModel.PropertyDescriptorCollection GetItemProperties(System.ComponentModel.PropertyDescriptor[] listAccessors)
{
PropertyDescriptorCollection sourceProps;
if (this.DataSource == null)
sourceProps = PropertyDescriptorCollection.Empty;

object obj1 = ListBindingHelper.GetList(this.DataSource);
if ((obj1 is ITypedList) && !string.IsNullOrEmpty(this.DataMember))
{
sourceProps = ListBindingHelper.GetListItemProperties(obj1, this.DataMember, listAccessors);
}
else
sourceProps = ListBindingHelper.GetListItemProperties(obj1, listAccessors);

PropertyDescriptor[] props = new PropertyDescriptor[sourceProps.Count + 2];
for (int i = 0; i < sourceProps.Count; i++)
{
props[i] = sourceProps[i];
}
CustomTypePropertyDescriptor cust = new CustomTypePropertyDescriptor(this,GetType(), "Fake", typeof(string));
props[sourceProps.Count] = cust;
CustomTypePropertyDescriptor cust1 = new CustomTypePropertyDescriptor(this,GetType(), "Adresse", typeof(string));
props[sourceProps.Count + 1] = cust1;


return new PropertyDescriptorCollection(props);
}

private class CustomTypePropertyDescriptor : PropertyDescriptor
{
public CustomTypePropertyDescriptor(CustomClientBindingSource source, Type componentType, string propertyName, Type propertyType)
: base(propertyName, null)
{
this.propertyName = propertyName;
this.propertyType = propertyType;
this.componentType = componentType;
this.source = source;
}

private string propertyName;
private Type propertyType;
private Type componentType;
private CustomClientBindingSource source;

public override object GetValue(object component)
{
return source.OnPropertyEval(component, propertyName, propertyType);
}

protected override Attribute[] AttributeArray
{
get
{
return null;
}
set
{
}
}
public override Type ComponentType
{
get
{
return componentType;
}
}
public override bool IsReadOnly
{
get
{
return true;
}
}
public override Type PropertyType
{
get
{
return propertyType;
}
}
public override bool CanResetValue(object component)
{
return false;
}
public override void ResetValue(object component)
{
}
public override void SetValue(object component, object value)
{
}
public override bool ShouldSerializeValue(object component)
{
return false;
}
}
}

Ma form ou j'ai placé un datagridview que j'ai binder avec mon ClientBindingSource :

public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
Adresse adr = new Adresse(1, "Rue des marguerites");
ArrayList list = new ArrayList();
list.Add(new Client("Toto", "Seb", adr));
list.Add(new Client("Titi", "Franck", adr));
customClientBindingSource1.DataSource = list;
}

private object customClientBindingSource1_PropertyEval(object sender, object row, string propertyName, Type propertyType)
{
switch (propertyName)
{
case "Fake":
return ((Client)row).Nom + " " + ((Client)row).Prenom;
case "Adresse":
return ((Client)row).AdresseClient.NumeroAdresse + " " + ((Client)row).AdresseClient.Rue;
}
return null;
}
}

Dans l'évenement PropertyEval, j'alimente les nouvelles propriétés.

Voilà


Cette discussion est classée dans : public, system, private, produit, collection


Répondre à ce message

Sujets en rapport avec ce message

C# - Erreur NullReferenceException [ par skyline86 ] Bonjour, 'ai un message NullReferenceExceptionsur la ligne     Program.monFormulaire.lb_log.BeginInvoke(new GPRSListener.Principale.affichageLog( Probleme avec une collection Dictionary [ par megamario ] Bonsoir, Décidément je vais pas m'en sortir, avec c'est collection. Après pas mal de difficulté avec une Hashtable avec certaine de résolu une Dictio Plantage designer suite à une modification sur le formulaire [ par Mickael1984 ] Bonjour, je suis un peu perdu sur un développement que je fais actuellement je mets le code, si quelqu'un a déjà eu ce genre de problème. Mon problè un programme .net/c# qui realise le cryptage et decryptage d'un repertoire ainsi tatouage d'une image [ par Haitam09 ] Bonsoir tout le monde !! j'ai un programme .net/c# qui realise le cryptage et decryptage d'un repertoire ainsi tatouage d'une image !! une fois je l'e visuelbasic [ par hibatallahmessadine ] slt tous le monde j'utiluse visuel basic 2008 et je trouve un probleme dans le codes sources pour executer des données au base donné sil vous plais r erreur de syntaxe dans l'instruction INSERT INTO :( base access [ par nizarawi ] Bonjour, svp est ce que vous pouvez m'aider??j'ai une erreur de syntaxe dans l'instruction INSERT INTO ,et alors je vous pries de bien vouloir m'aide aceeder une zone de texte créer dynamiquement [ par abrim ] Bonjour Tout le monde Je débute avec c# j'ai besoin de votre aide , Moi j'ai cré un bouton et une zone de text dynamiquement avec c# sous visual stu Gestion des erreurs WCF dans Silverlight [ par EmacLi ] Bonjour à tous, Dans mon application silverlight, je tombe sur cette erreur apparemment classique lorsqu'un service wcf est utilisé : CommunicationEx Aide sur le DataBinding [ par jrivet ] Bonjour à tous, Une fois de plus je reviens vers vous. J'ai déjà utilisé le DataBindings (de manière simple) avant et cela fonctionnait mais la je do boucle infini - services [ par jumicoud ] Bonjour, Je réalise un service qui à pour but de faire communiquer 2 applications client serveur. Avec l'application A je communique en TCP, avec la


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 7,722 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales