[databinding] formatter/parser les propriétés d'objets bindés.

cs_mathmax Messages postés 403 Date d'inscription vendredi 28 octobre 2005 Statut Membre Dernière intervention 31 août 2008 - 9 nov. 2007 à 12:38
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 - 20 nov. 2007 à 00:20
Bonjour,


J'aimerais savoir si il y a un moyen de formatter/parser les valeurs d'une colonne d'une DataGridView bindée à une datasource.

Par exemple, la DataGridView est bindée à une liste de produits. Un
objet produit possède une propriété prix qui est de type float. Dans la
colonne prix de la DataGridView on souhaite afficher le prix suivit de
la devise. Je sais que cela est possible à faire avec une textbox par
exemple. Il suffit d'écrire cela :

<!-- BEGIN TEMPLATE: bbcode_code --><!--[if !IE]><-->
<!----><!--[endif]--><!--[if IE]>
<![endif]--> 
...
Binding b = new Binding("Text", order, "Price");
b.Format += new ConvertEventHandler(b_Format);
b.Parse += new ConvertEventHandler(b_Parse);
 
textBox1.DataBindings.Add(b);
}
 
void b_Parse(object sender, ConvertEventArgs e)
{
e.Value = decimal.Parse((string) e.Value, NumberStyles.Currency);
}
 
void b_Format(object sender, ConvertEventArgs e)
{
e.Value = ((decimal) e.Value).ToString("C");
}
 

<!-- END TEMPLATE: bbcode_code -->Mais est ce possible quand les sources sont des collections comme dans le cas d'une DataGridView ?


D'autre part j'ai une propriété de type Quantity dans ma classe Product
et je souhaiterais afficher dans une des colonnes de ma DataGridView,
non pas la valeur de sa méthode ToString() mais l'une de ces
propriétés, en l'occurrence sa propriété Value de type float. Est ce
possible ?


Pour l'instant j'ai réussi à résoudre ces 2 problèmes en écrivant ma
CustomSourceView (classe implémentant ITypedList) et en récrivant les
propertyDescriptor dans la méthode GetItemProperties(). Mais j'aurais
aimé savoir si il y une méthode plus simple/traditionnelle de procéder
pour ces 2 cas de figures. Y t-il des pros du databinding dans le coin
?


Merci d'avance pour vos suggestions.

Mathmax

****************************************http://www.postsharp.org/
A voir également:

5 réponses

cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
10 nov. 2007 à 11:59
Petit exemple pour le formattage:

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

  
private
void Form_Load(
object sender,
EventArgs e)
   {
     
List<
Product> ps =
new
List<
Product>();
      ps.Add(
new
Product(
"p1", 3423));
      ps.Add(
new
Product(
"p2", 342343));
      ps.Add(
new
Product(
"p3", 33));
      ps.Add(
new
Product(
"p4", 0.23f));
      ps.Add(
new
Product(
"p5", 34234324));
     
this.dataGridView.DataSource = ps;
     
this.dataGridView.Columns[
"price"].DefaultCellStyle.Format =
"c";
   }
}

public
class
Product
{
  
private
string _name =
String.Empty;
  
private
float _price = 0f;

  
public Product(
string name,
float price) {
this._name = name;
this._price = price; }

  
public
string Name {
get {
return
this._name; } }
  
public
float Price {
get {
return
this._price; } }
}

<hr />
-My Blog-
0
cs_mathmax Messages postés 403 Date d'inscription vendredi 28 octobre 2005 Statut Membre Dernière intervention 31 août 2008
10 nov. 2007 à 15:32
Ok mais ça reste limitté. On ne peut pas définir sa propre méthode de formattage ?
Quand est-il pour le parsage ?
Et pour afficher une sous propriété de laa propriété Quantity de product ? Par exemple afficher la propriété Value de Quantity dans une colonne de la DataGridView.

publicclassProduct
{
  
private string _name =
String.Empty;
  
private float _price = 0f;

  
public Product(
string name,
float price) {
this._name = name;
this._price = price; }

  
public string Name {
get {
return this._name; } }
  
public float Price {
get {
return this._price; } }

  
public Quantity Quantity {
get {
return this._price; } }

}

publicclass Quantity

{
   
public float Value {get; set;}
    ...
}

Mathmax

****************************************http://www.postsharp.org/
0
cs_mathmax Messages postés 403 Date d'inscription vendredi 28 octobre 2005 Statut Membre Dernière intervention 31 août 2008
14 nov. 2007 à 02:57
Pas d'idée ?

Mathmax

****************************************http://www.postsharp.org/
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
14 nov. 2007 à 10:02
Non pas d'idée dans l'immédiat, sorry...

<hr />
-My Blog-
0

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

Posez votre question
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
20 nov. 2007 à 00:20
salut,

tu peux peut être essayer avec l'interface ICustomTypeDescriptor qui doit te permettre d'ajouter des propriétés dynamquement pour le binding...je n'ai jamais creusé le sujet...

ShareVB
0
Rejoignez-nous