2017-07-21 3 views
1

J'utilise PostSharp et RadGridView de Telerik. Certaines colonnes ont des données personnalisées à l'aide d'un DataTypeConverter, que j'utilise pour charger une valeur à partir d'une propriété nommée Name de type AdvisableDictionary<Tkey, TValue>.PostSharp get_Property erreur

La grille possède le bouton de filtre et lorsque vous cliquez dessus, une fenêtre contextuelle s'affiche avec des options de filtrage de type Excel.

Cependant, lorsque je clique sur ce bouton, j'obtiens une erreur en disant Failed to compare two elements in the array. Cela se produit uniquement pour les colonnes avec ce type de données. Je n'ai pas beaucoup d'expérience avec PostSharp, mais je pense que cela est généré par PostSharp.

Voici les dernières lignes de la fenêtre de sortie de PostSharp, avant qu'il ne jette l'exception:

The thread 0x3964 has exited with code 0 (0x0). 

The thread 0x364 has exited with code 0 (0x0). 

Step into: Stepping over non-user code 'TranslatableObject.get_Name' 

Step into: Stepping over non-user code 'TranslatableObject.<Name>c__Binding1.GetValue' 

Step into: Stepping over non-user code 'TranslatableObject.<Name>c__Binding1.get_LocationInfo' 

Step into: Stepping over non-user code 'TranslatableObject.<Name>c__Binding.GetValue' 

Que puis-je faire pour résoudre ce problème?

+0

Pourriez-vous s'il vous plaît coller ici la trace de la pile et le message complet de l'exception? Si vous partagez un exemple minimal qui reproduit ce comportement, cela aidera également à identifier la cause. –

+0

Merci! [Ici] (http://www.telerik.com/account/ClientsFiles/2e7a5d04-c0cc-4c2f-a835-8531ead667c4_ExcelLikeFiltering.zip?accesskey=76010F0054C6AF950F4458F5A0E88AD6643EF13E&expires=636369830483897924) est un exemple de projet. J'ai trouvé une solution comme dans la réponse ci-dessous. – Tim

Répondre

-1

J'ai trouvé une solution. AdvisableDctionary n'implémente pas IComparable utilisé pour trier la liste des éléments. J'ai créé une classe pour hériter AdvisableDictionary et implémenter IComparable et dans l'événement FilterConfirmed du FilterPopup I a corrigé la valeur du descripteur de filtre.

0

Vous pouvez créer une classe pour hériter de AdvisableDictionary et implémenter IComparable.

public class AdvisableDictionary: IComparable 
{ 
    //here add the code from your heart 
} 

HERE 1

HERE 2

donc son simple événement FilterConfirmed du FilterPopup vous devez corriger la valeur du descripteur de filtre.

C'est tout.

Voici un exemple prj. S'il vous plaît, jetez un oeil. Amusez-vous bien la programmation en C#.

Que c'est ma solution, besoin d'essayer, d'être un patron, d'essayer dur, d'être heureux :)