[WinForm .Net 2] Databinding, Enumerations et localisation

J’ai un problème dans une appli WinForm… En effet, j’ai des objets métiers qui contiennent une propriété MyEnum… Et je voudrais svoir comment avec un datagridview changer la valeur affichée pour cette propriété lors du databinding, et que ce soit localisable… Et là c’est la cata…
Summon les gurus des Windows Forms (je suis une quiche dans la conception de Gui…).

[code]public enum ExamState
{
Started,
Locked,
BeforeStarting
}

public class StudentExamState
{
public string Name{…}
public ExamState ExamState{…}

}

public class ExamMonitoringControl
{
IBindingList DataSource
{…
set
{

dgvStudentStats.DataSource = value;
}
}
}[/code]

La classe DataGridViewComboBoxColumn est celle qui est utilisée pour représenter les enums.

Tu as une propriété DataSource, ValueMember et DisplayMember qui permettent de peupler la liste des éléments proposés par la ComboBox. (regarde l’exemple de la doc de la classe sur msdn)

Enum.GetValues() et Enum.GetNames() permettent de récupérer la liste de tes enums sous forme de chaîne.

Pour ce qui est de la localisation, à mon avis il faut se tourner vers une gestion par index (selectedindex) plutôt que par valeur (selecteditem).

Enfin, tout ça sous-entend de gérer un peu plus « à la mano » le binding sur ta datagridview… Le mode « automatique/drag/drop ca roule » a ses limites :stuck_out_tongue:

Merci pour ces quelques pistes… je vais me pencher sur les GetNames() etc.

Bon bah finalement j’ai fait ca plus salement que j’aurais voulu… J’ai rajouté un fichier de ressources à mon à ma BL (beurk) et j’ai rajouter une propriété qui en fonction de la valeur enum va chercher la string qui va bien dans le fichier de ressource… C’est assez dégueulasse mais pour l’instant j’ai pas vu plus simple…

Les enums sont pas localisables oui, c’est juste des alias sur des nombres, si tu veux pas utiliser les nom de l’enum, il te faut faire le databinding a la main. Je sais pas trop comment on gere ca dans VS pour la PropertyGrid tiens… faudrait regarder mais il me semble pas qu’on localise…

Non, j’ai cherché partout… c mort… Ce qui serait génial (à soumettre à tes supérieurs ^^) ce serait de pouvoir définir la facon dans ca s’affiche dans la chaine de formatage du genre:
{0:0:Chaine pour 0:1:Chaine pour un:2:Chaine pour deux…} en utilisant peut-être un autre caractère séparateur j’en sais rien, mais quelque chose qui s’en approche…
Du coup il suffirait de localiser la chaîne de formatage (ce qui me semble moins porcinet quand même).

Non mais c’est pas fait pour, tu peux utiliser un typeconverter pour ca a la limite si vraiment tu veux etre supa funky. Je ne peux que super recommander ca:

http://msdn.microsoft.com/netframework/pro…classlibraries/

et ca :

http://www.amazon.com/gp/product/032124675…5Fencoding=UTF8

Localiser une enum ca revient un peu à localiser le nom d’une propriété je trouve…

Apres un typeconverter homemade peut toujours te permettre de t’en dépatouiller…

De la meme manière que dans une pgrid, une classe héritant de UITypeEditor et un attribut [Editor()] sur ta propriété te permettrait de peupler une combobox correctement (sous entendu : en topant les infos ailleurs).