Code dérivé colonnes de l

Code dérivé colonnes de l'éco ii


Explique ce Code Dérivé Colonnes sont, et comment les utiliser.

L'objectif de cet article sera de l'Événement 'des colonnes dérivées'. & nbsp Jan Nord & eacute n (Borland) m'a orienté dans la direction de ces choses récemment, lorsque je lui ai demandé comment résoudre un GUI problème que j'ai eu. & nbsp Lorsque je l'ai utilisé en Gras pour Delphi, il y a cette très belle composant d'interface graphique appelée BoldSelectionListBox. & nbsp Cette composante laissez-moi vous montrer une liste d'éléments avec une Case à cocher à côté de chaque ligne, en cochant / décochant une case voudrais ajouter / supprimer une association entre l'élément & nbsp sélectionné et un autre objet de mon choix. & nbsp ce n'est pas la meilleure explication dans le Monde, afin de prendre un coup d'oeil à la suite de diagramme UML:

Cliquer pour agrandir

Ce schéma est quelque chose que j'ai travaillé récemment dans l'ÉCO II. & nbsp C'est mon interprétation de l'information nécessaire pour créer un Inductive de l'Interface Utilisateur. & nbsp Regardant le diagramme UML de près, vous verrez que chaque Tâche a zéro ou plusieurs PermittedRoles (Rôle) références. & nbsp L'idée que, en spécifiant le Rôle de l'utilisateur actuel, je peux facilement obtenir une liste de tâches dont ils sont autorisés à effectuer.

cette BoldSelectionListBox je voudrais être en mesure de spécifier une Tâche le contexte, et ensuite une liste de tous les Rôles dans une sorte de CheckListBox. & nbsp Tiques apparaît dans toutes les Cases où le Rôle est autorisé à exécuter les actions énumérées, et pas de tique où il ne l'est pas. & nbsp supplémentaires astuce est bien sûr que, en cochant une Case à cocher Gras serait de créer le lien de l'objet nécessaire pour attacher le Rôle de la Tâche, et l'ajouter à un Rôle.AllowedTasks (et bien sûr de la Tâche.PermittedRoles).

Voyant que l'ÉCO-II n'introduit pas de contrôles d'interface utilisateur graphique (il fournit .net de liaison de données interfaces de sorte que vous pouvez utiliser les commandes standards), je me doutais que je ne serais pas en mesure d'obtenir le même genre d'effet. & nbsp Jan m'a gentiment envoyé une petite démo montrant comment réaliser cela en utilisant uniquement des composants Datagrid. & nbsp j'ai vite eu cette logique de l'écrit dans ma propre application, et cela a fonctionné à merveille!

j'ai ajouté l'expression de poignées pour mes Rôles (ehRoles) et les Tâches (ehTasks), lié à une grille et chaque ajout Ajouter / Supprimer des boutons. & nbsp j'ai mis chacun de ces expression poignées pour récupérer tous les cas, les Rôles'.allInstances' et des 'Tâches'.allInstances'.

Sur le côté gauche de mon GUI, j'ai eu toutes mes Tâches énumérées, et sur la droite, j'ai eu tous mes Rôles. & nbsp je voulais ajouter & nbsp une Case à cocher à côté de chaque Rôle, de sorte que j'ai pu préciser si le Rôle a été autorisé à exécuter sélectionné de la tâche ou pas. & nbsp Le premier problème à résoudre est de savoir quelle Tâche est la 'actuellement sélectionné'. & nbsp Pour ce faire, j'ai ajouté un CurrencyManagerHandle nommé 'chTasks', son RootHandle à ehTasks, et son BindingContext pour TasksDataGrid. & nbsp Maintenant chTasks détient la Tâche en cours, agréable et facile.

Ensuite, j'ai besoin d'obtenir une colonne de cases à cocher dans & nbsp ma RolesDataGrid et définir AllowNull à False. & nbsp Pour ce faire, j'ai ajouté un faux TaskPermitted colonne de ehRoles et définissez son type de Système.Boolean. & nbsp Remarque: Le bouton 'Ajouter' dans les Colonnes de l'éditeur a une liste Déroulante de l'icône à côté, cliquez sur et sélectionnez EventDerivedColumn. & nbsp j'ai ensuite ajouté & nbsp la colonne supplémentaire à mon RolesDataGrid, assurez-vous qu'il a une Case à cocher, j'ai choisi la liste Déroulante sur le bouton Ajouter et sélectionné DataGridBoolColumn. & nbsp j'ai mis le MappingName à TaskPermitted.

jusqu'à présent, nous avons tout ce dont nous avons besoin de voir les Cases à cocher, mais aucun moyen de dire la grille de données si la case doit être cochée ou non. & nbsp Pour ce faire, nous avons besoin d'écrire du code dans l'ehRoles' DeriveValue événement, mais d'abord, je tiens à ajouter quelque chose & nbsp à faire & nbsp le code un peu plus facile à écrire. & nbsp & nbsp j'ai ajouté un nouveau ExpressionHandle ehTasksPermittedRoles, le RootHandle était le CurrencyHandle (chTasks) et l'expression était 'l'auto.PermittedRoles'. & nbsp Cela me permettrait de vérifier facilement les Rôles qui sont autorisés à exécuter la 'Tâche en cours'.

& nbsp à écrire un peu de code pour calculer la valeur de ehRoles.TaskPermitted. & nbsp Ceci est fait dans le ehRoles.DeriveValue événement, comme ceci:

private void ehRoles_DeriveValue(object sender, Borland.Eco.Les poignées.DeriveEventArgs e)
{
& nbsp commutateur (e.De nom) //Un événement pour tous les dérivés de colonnes

& nbsp {
& nbsp & nbsp & nbsp cas 'TaskPermitted':
& ! & ! & ! & ! & nbsp //Obtenir une liste de rôles pour cette tâche

& ! & ! & ! & ! & nbsp IElementCollection rôles = ehTasksPermittedRoles.L'élément de IElementCollection

& ! & ! & ! & ! & nbsp //Éviter une référence nulle exception

& ! & ! & ! & ! & nbsp si (rôles == null)
& ! & ! & ! & ! & nbsp {
& ! & ! & ! & ! & ! & ! & nbsp //retourne un élément représentant la constante 'false'
& ! & ! & ! & ! & ! & ! & nbsp e.ResultElement = EcoSpace.VariableFactoryService.CreateConstant(false)
& ! & ! & ! & ! & ! & ! & nbsp retour
& ! & ! & ! & ! & nbsp }

& ! & ! & ! & ! & nbsp //Observer la ehTaskPermittedRoles élément, cela nous montre que lorsque l'élément
& ! & ! & ! & ! & nbsp //change, de sorte que nous pouvons invalider l'interface graphique
& ! & ! & ! & ! & nbsp ehTasksPermittedRoles.SubscribeToElement(e.ResubscribeSubscriber)

& ! & ! & ! & ! & nbsp //Aussi observer les éléments de la liste
& ! & ! & ! & ! & nbsp rôles.SubscribeToValue(e.ValueChangeSubscriber)

& ! & ! & ! & ! & nbsp //Si le permis rôles contient le Rôle actuel puis retour
& ! & ! & ! & ! & nbsp //un élément représentant la constante 'true'

& ! & ! & ! & ! & nbsp si (rôles.Contient e.RootElement))
& ! & ! & ! & ! & ! & ! & nbsp e.ResultElement = EcoSpace.VariableFactoryService.CreateConstant(true)
& ! & ! & ! & ! & nbsp else
& ! & ! & ! & ! & ! & ! & nbsp //Sinon, le retour d'un élément représentant la constante 'false'
& ! & ! & ! & ! & ! & ! & nbsp e.ResultElement = EcoSpace.VariableFactoryService.CreateConstant(false)
& nbsp
& ! & ! & ! & ! & nbsp pause

& nbsp & nbsp & nbsp valeur par défaut:
& ! & ! & ! & nbsp throw new Exception(e.Nom de l' 'ne proviennent pas correctement')
& nbsp }//switch
}//ehRoles_DeriveValue

Et enfin & nbsp nous avons besoin d'avoir un moyen pour permettre à l'utilisateur de cocher / décocher une Case à cocher et l'association ajoutés ou supprimés à partir de la Tâche.PermittedRoles. & nbsp Ceci est fait dans le ehRoles.ReverseDeriveValue de l'événement, à l'instar de

private void ehRoles_ReverseDeriveValue(object sender, Borland.Eco.Les poignées.ReverseDeriveEventArgs e)
{
& nbsp commutateur(e.Nom) //Un événement pour tous les dérivés de colonnes
& nbsp {
& nbsp & nbsp & nbsp cas 'TaskPermitted':
& ! & ! & ! & ! & nbsp //Obtenir une liste de rôles pour la tâche en cours
& ! & ! & ! & ! & nbsp IElementCollection rôles = (IElementCollection) ehTasksPermittedRoles.L'élément

& ! & ! & ! & ! & nbsp //Éviter une référence nulle exception
& ! & ! & ! & ! & nbsp si (rôles == null)
& ! & ! & ! & ! & ! & ! & nbsp retour

& ! & ! & ! & ! & nbsp //Transtypage de la valeur d'un Booléen (à partir de la grille de données Case)
& ! & ! & ! & ! & nbsp si ( (Boolean) e.Valeur)
& ! & ! & ! & ! & nbsp {
& ! & ! & ! & ! & ! & ! & nbsp //Si la case a été cochée, et le cochée Rôle n'est pas dans le
& ! & ! & ! & ! & ! & ! & nbsp //Tâche.PermittedRoles liste puis ajouter
& ! & ! & ! & ! & ! & ! & nbsp if (!les rôles.Contient e.RootElement))
& ! & ! & ! & ! & ! & ! & ! & ! & nbsp rôles.Ajouter de l'e.RootElement)
& ! & ! & ! & ! & nbsp }
& ! & ! & ! & ! & nbsp else
& ! & ! & ! & ! & nbsp {
& ! & ! & ! & ! & ! & ! & nbsp //Si la case est décochée, et le cochée Rôle existe dans le
& ! & ! & ! & ! & ! & ! & nbsp //Tâche.PermittedRoles liste puis l'enlever
& ! & ! & ! & ! & ! & ! & nbsp si (rôles.Contient e.RootElement))
& ! & ! & ! & ! & ! & ! & ! & ! & nbsp rôles.Supprimer des e.RootElement)
& ! & ! & ! & ! & nbsp }
& ! & ! & ! & ! & nbsp pause
& nbsp }//switch
}//ehRoles_ReverseDeriveValue

Il peut prendre un peu de s'habituer à, mais si vous l'avez lu à travers quelques temps, vous devriez être en mesure d'obtenir le jist de. & nbsp Cela donne essentiellement le développeur de la puissance de la inversée dérivés attributs pour une utilisation uniquement à l'intérieur de l'interface graphique. & nbsp Cela signifie que nous pouvons faire des choses intelligentes avec ECO II des objets sans avoir à inclure inverse dérivés attributs dans le modèle afin de satisfaire GUI exigences.

& nbsp

& nbsp







Code derive colonnes de l'eco ii


Code derive colonnes de l'eco ii : Plusieurs milliers de conseils pour vous faciliter la vie.


Explique ce Code Derive Colonnes sont, et comment les utiliser.

L'objectif de cet article sera de l'Evenement 'des colonnes derivees'. & nbsp Jan Nord & eacute n (Borland) m'a oriente dans la direction de ces choses recemment, lorsque je lui ai demande comment resoudre un GUI probleme que j'ai eu. & nbsp Lorsque je l'ai utilise en Gras pour Delphi, il y a cette tres belle composant d'interface graphique appelee BoldSelectionListBox. & nbsp Cette composante laissez-moi vous montrer une liste d'elements avec une Case a cocher a cote de chaque ligne, en cochant / decochant une case voudrais ajouter / supprimer une association entre l'element & nbsp selectionne et un autre objet de mon choix. & nbsp ce n'est pas la meilleure explication dans le Monde, afin de prendre un coup d'oeil a la suite de diagramme UML:

Cliquer pour agrandir

Ce schema est quelque chose que j'ai travaille recemment dans l'ECO II. & nbsp C'est mon interpretation de l'information necessaire pour creer un Inductive de l'Interface Utilisateur. & nbsp Regardant le diagramme UML de pres, vous verrez que chaque Tache a zero ou plusieurs PermittedRoles (Role) references. & nbsp L'idee que, en specifiant le Role de l'utilisateur actuel, je peux facilement obtenir une liste de taches dont ils sont autorises a effectuer.

cette BoldSelectionListBox je voudrais etre en mesure de specifier une Tache le contexte, et ensuite une liste de tous les Roles dans une sorte de CheckListBox. & nbsp Tiques apparaît dans toutes les Cases ou le Role est autorise a executer les actions enumerees, et pas de tique ou il ne l'est pas. & nbsp supplementaires astuce est bien sûr que, en cochant une Case a cocher Gras serait de creer le lien de l'objet necessaire pour attacher le Role de la Tache, et l'ajouter a un Role.AllowedTasks (et bien sûr de la Tache.PermittedRoles).

Voyant que l'ECO-II n'introduit pas de controles d'interface utilisateur graphique (il fournit .net de liaison de donnees interfaces de sorte que vous pouvez utiliser les commandes standards), je me doutais que je ne serais pas en mesure d'obtenir le meme genre d'effet. & nbsp Jan m'a gentiment envoye une petite demo montrant comment realiser cela en utilisant uniquement des composants Datagrid. & nbsp j'ai vite eu cette logique de l'ecrit dans ma propre application, et cela a fonctionne a merveille!

j'ai ajoute l'expression de poignees pour mes Roles (ehRoles) et les Taches (ehTasks), lie a une grille et chaque ajout Ajouter / Supprimer des boutons. & nbsp j'ai mis chacun de ces expression poignees pour recuperer tous les cas, les Roles'.allInstances' et des 'Taches'.allInstances'.

Sur le cote gauche de mon GUI, j'ai eu toutes mes Taches enumerees, et sur la droite, j'ai eu tous mes Roles. & nbsp je voulais ajouter & nbsp une Case a cocher a cote de chaque Role, de sorte que j'ai pu preciser si le Role a ete autorise a executer selectionne de la tache ou pas. & nbsp Le premier probleme a resoudre est de savoir quelle Tache est la 'actuellement selectionne'. & nbsp Pour ce faire, j'ai ajoute un CurrencyManagerHandle nomme 'chTasks', son RootHandle a ehTasks, et son BindingContext pour TasksDataGrid. & nbsp Maintenant chTasks detient la Tache en cours, agreable et facile.

Ensuite, j'ai besoin d'obtenir une colonne de cases a cocher dans & nbsp ma RolesDataGrid et definir AllowNull a False. & nbsp Pour ce faire, j'ai ajoute un faux TaskPermitted colonne de ehRoles et definissez son type de Systeme.Boolean. & nbsp Remarque: Le bouton 'Ajouter' dans les Colonnes de l'editeur a une liste Deroulante de l'icone a cote, cliquez sur et selectionnez EventDerivedColumn. & nbsp j'ai ensuite ajoute & nbsp la colonne supplementaire a mon RolesDataGrid, assurez-vous qu'il a une Case a cocher, j'ai choisi la liste Deroulante sur le bouton Ajouter et selectionne DataGridBoolColumn. & nbsp j'ai mis le MappingName a TaskPermitted.

jusqu'a present, nous avons tout ce dont nous avons besoin de voir les Cases a cocher, mais aucun moyen de dire la grille de donnees si la case doit etre cochee ou non. & nbsp Pour ce faire, nous avons besoin d'ecrire du code dans l'ehRoles' DeriveValue evenement, mais d'abord, je tiens a ajouter quelque chose & nbsp a faire & nbsp le code un peu plus facile a ecrire. & nbsp & nbsp j'ai ajoute un nouveau ExpressionHandle ehTasksPermittedRoles, le RootHandle etait le CurrencyHandle (chTasks) et l'expression etait 'l'auto.PermittedRoles'. & nbsp Cela me permettrait de verifier facilement les Roles qui sont autorises a executer la 'Tache en cours'.

& nbsp a ecrire un peu de code pour calculer la valeur de ehRoles.TaskPermitted. & nbsp Ceci est fait dans le ehRoles.DeriveValue evenement, comme ceci:

private void ehRoles_DeriveValue(object sender, Borland.Eco.Les poignees.DeriveEventArgs e)
{
& nbsp commutateur (e.De nom) //Un evenement pour tous les derives de colonnes

& nbsp {
& nbsp & nbsp & nbsp cas 'TaskPermitted':
& ! & ! & ! & ! & nbsp //Obtenir une liste de roles pour cette tache

& ! & ! & ! & ! & nbsp IElementCollection roles = ehTasksPermittedRoles.L'element de IElementCollection

& ! & ! & ! & ! & nbsp //Eviter une reference nulle exception

& ! & ! & ! & ! & nbsp si (roles == null)
& ! & ! & ! & ! & nbsp {
& ! & ! & ! & ! & ! & ! & nbsp //retourne un element representant la constante 'false'
& ! & ! & ! & ! & ! & ! & nbsp e.ResultElement = EcoSpace.VariableFactoryService.CreateConstant(false)
& ! & ! & ! & ! & ! & ! & nbsp retour
& ! & ! & ! & ! & nbsp }

& ! & ! & ! & ! & nbsp //Observer la ehTaskPermittedRoles element, cela nous montre que lorsque l'element
& ! & ! & ! & ! & nbsp //change, de sorte que nous pouvons invalider l'interface graphique
& ! & ! & ! & ! & nbsp ehTasksPermittedRoles.SubscribeToElement(e.ResubscribeSubscriber)

& ! & ! & ! & ! & nbsp //Aussi observer les elements de la liste
& ! & ! & ! & ! & nbsp roles.SubscribeToValue(e.ValueChangeSubscriber)

& ! & ! & ! & ! & nbsp //Si le permis roles contient le Role actuel puis retour
& ! & ! & ! & ! & nbsp //un element representant la constante 'true'

& ! & ! & ! & ! & nbsp si (roles.Contient e.RootElement))
& ! & ! & ! & ! & ! & ! & nbsp e.ResultElement = EcoSpace.VariableFactoryService.CreateConstant(true)
& ! & ! & ! & ! & nbsp else
& ! & ! & ! & ! & ! & ! & nbsp //Sinon, le retour d'un element representant la constante 'false'
& ! & ! & ! & ! & ! & ! & nbsp e.ResultElement = EcoSpace.VariableFactoryService.CreateConstant(false)
& nbsp
& ! & ! & ! & ! & nbsp pause

& nbsp & nbsp & nbsp valeur par defaut:
& ! & ! & ! & nbsp throw new Exception(e.Nom de l' 'ne proviennent pas correctement')
& nbsp }//switch
}//ehRoles_DeriveValue

Et enfin & nbsp nous avons besoin d'avoir un moyen pour permettre a l'utilisateur de cocher / decocher une Case a cocher et l'association ajoutes ou supprimes a partir de la Tache.PermittedRoles. & nbsp Ceci est fait dans le ehRoles.ReverseDeriveValue de l'evenement, a l'instar de

private void ehRoles_ReverseDeriveValue(object sender, Borland.Eco.Les poignees.ReverseDeriveEventArgs e)
{
& nbsp commutateur(e.Nom) //Un evenement pour tous les derives de colonnes
& nbsp {
& nbsp & nbsp & nbsp cas 'TaskPermitted':
& ! & ! & ! & ! & nbsp //Obtenir une liste de roles pour la tache en cours
& ! & ! & ! & ! & nbsp IElementCollection roles = (IElementCollection) ehTasksPermittedRoles.L'element

& ! & ! & ! & ! & nbsp //Eviter une reference nulle exception
& ! & ! & ! & ! & nbsp si (roles == null)
& ! & ! & ! & ! & ! & ! & nbsp retour

& ! & ! & ! & ! & nbsp //Transtypage de la valeur d'un Booleen (a partir de la grille de donnees Case)
& ! & ! & ! & ! & nbsp si ( (Boolean) e.Valeur)
& ! & ! & ! & ! & nbsp {
& ! & ! & ! & ! & ! & ! & nbsp //Si la case a ete cochee, et le cochee Role n'est pas dans le
& ! & ! & ! & ! & ! & ! & nbsp //Tache.PermittedRoles liste puis ajouter
& ! & ! & ! & ! & ! & ! & nbsp if (!les roles.Contient e.RootElement))
& ! & ! & ! & ! & ! & ! & ! & ! & nbsp roles.Ajouter de l'e.RootElement)
& ! & ! & ! & ! & nbsp }
& ! & ! & ! & ! & nbsp else
& ! & ! & ! & ! & nbsp {
& ! & ! & ! & ! & ! & ! & nbsp //Si la case est decochee, et le cochee Role existe dans le
& ! & ! & ! & ! & ! & ! & nbsp //Tache.PermittedRoles liste puis l'enlever
& ! & ! & ! & ! & ! & ! & nbsp si (roles.Contient e.RootElement))
& ! & ! & ! & ! & ! & ! & ! & ! & nbsp roles.Supprimer des e.RootElement)
& ! & ! & ! & ! & nbsp }
& ! & ! & ! & ! & nbsp pause
& nbsp }//switch
}//ehRoles_ReverseDeriveValue

Il peut prendre un peu de s'habituer a, mais si vous l'avez lu a travers quelques temps, vous devriez etre en mesure d'obtenir le jist de. & nbsp Cela donne essentiellement le developpeur de la puissance de la inversee derives attributs pour une utilisation uniquement a l'interieur de l'interface graphique. & nbsp Cela signifie que nous pouvons faire des choses intelligentes avec ECO II des objets sans avoir a inclure inverse derives attributs dans le modele afin de satisfaire GUI exigences.

& nbsp

& nbsp

Code dérivé colonnes de l'éco ii

Code dérivé colonnes de l'éco ii : Plusieurs milliers de conseils pour vous faciliter la vie.
Recommander aux amis
  • gplus
  • pinterest

Messages récents

Commentaire

Laisser un commentaire

évaluation