Désolé, c'est le meilleur sujet que je peux trouver, si je comprenais mieux la solution, je pourrais probablement formuler une meilleure ligne d'objet.Utiliser des délégués pour gérer un événement
J'utilise un contrôle de grille, Super liste, l situé ici:
Avant de lire le problème, s'il vous plaît noter que vous pouvez télécharger une petite application de l'échantillon VB.NET 2005, démos problème:
http://dokmanovich.com/Documents/SuperListEvents.zip
Obtenir la réponse à ma question, je l'espère, aidez-moi à comprendre les événements dynamiques mieux dans le contexte de ce que je suis en train d'accomplir .
La grille fonctionne comme ceci: Lorsque vous ajoutez une colonne à la grille, vous spécifiez l'adresse d'un gestionnaire d'événements qui renverra la valeur lors de l'exécution. Dans ce cas, la fonction CC_ItemValueAccessor. Cette dernière fonction sera appelée avec un paramètre d'entrée qui, dans ce cas, est un objet "ToDo". Chaque objet ToDo sera rendu en une seule ligne dans la grille. Le travail de la fonction CC_ItemValueAccessor consiste à renvoyer la valeur de la colonne à afficher par la grille pour la ligne correspondant à l'objet ToDo transmis.
Cela fonctionne bien jusqu'à ce que je le prends à l'étape suivante:
Je veux dynamiquement créer des colonnes au moment de l'exécution. Par exemple, je souhaite afficher la sortie d'une donnée renvoyée suite à l'exécution d'un SQL spécifié par l'utilisateur. En utilisant l'approche statique décrite précédemment, j'ai une fonction columnItemValueAccessor chargée de renvoyer la valeur de chaque colonne dans la grille pour l'objet passé dans la ligne. Maintenant, puisque les colonnes sont déterminées à l'exécution en fonction des résultats SQL retournés, je crois que je dois écrire un gestionnaire générique qui gère toutes les colonnes, détermine le nom de la colonne qui a déclenché cet événement et retourne la valeur de cette colonne l'objet ligne transmis comme seul paramètre. Le problème est que la fonction ItemValueAccessor a une signature qui inclut uniquement l'objet ligne et que je ne connais pas un moyen de déterminer le nom de colonne nécessaire, car toutes les colonnes ont été connectées à la même fonction ItemValueAccessor que la fonction ItemValueAccessor. gestionnaire d'événements.
Je soupçonne que c'est juste une limitation du contrôle et que pour surmonter ce problème je devrais améliorer le contrôle personnalisé sous-jacent, mais cela dépasse probablement mes compétences actuelles car c'est un contrôle avancé écrit en C# et je Suis un gars VB.
Voici le code:
Private Sub AddCcColumn()
Dim NewColumn As New BinaryComponents.SuperList.Column("CC", "CC", 110, AddressOf Cc_ItemValueAccessor)
_SuperList.Columns.Add(NewColumn)
End Sub
Private Function Cc_ItemValueAccessor(ByVal rowItem As Object) As Object
Dim ToDo As ToDo = CType(rowItem, SrToDoAndException).ToDo
Return ToDo.CCs.ToString
End Function
« ---------------------------
Et voici les signatures de la méthode instantiator de Column et la définition du dernier paramètre qui est responsable de la spécification de la procédure qui gère identifie le gestionnaire d'événements chargé de renvoyer la valeur de la colonne.
Public Sub New (nom ByVal As String, légende ByVal As String, largeur ByVal As Integer, ByVal columnItemValueAccessor Comme BinaryComponents.SuperList.ColumnItemValueAccessor) Membre du BinaryComponents.SuperList.Colonne
Sub New Public (objet ByVal comme objet, méthode ByVal comme System.IntPtr) Membre du BinaryComponents.SuperList.ColumnItemValueAccessor
Quelqu'un at-il des suggestions ou suis-je coincé? J'adorerais vraiment utiliser les capacités de regroupement fantaisie de ce contrôle afin que je puisse afficher une sortie dynamique qui permet à l'utilisateur de regrouper la sortie dynamique d'un SQL par n'importe quelle colonne.
J'ai adressé la question à l'auteur sur le site ci-dessus mais il est resté sans réponse. C'est une tentative désespérée de trouver un moyen de le faire.
Merci d'avoir porté avec moi. J'espère que cette question n'est pas rejetée en raison du fait que je parle d'un contrôle par un tiers. Mon espoir est que la réponse réside dans une meilleure compréhension des délégués, un sujet plus universel.
Le commentaire de Lamba est intéressant, mais j'ai besoin de plus d'aide. J'ai créé un exemple de travail, en dépouillant la question à l'essentiel et en ajoutant un commentaire montrant ce qui est nécessaire. Vous pouvez l'obtenir ici si vous êtes enclin: http://dokmanovich.com/Documents/SuperListEvents.zip Sinon, je suis à la recherche de quelque chose betetr que le code pesudo et un point dans une direction générale, depuis que je ne peut pas sembler comprendre par moi-même. J'offre une prime, à partir de 50. – ChadD