2017-06-27 1 views
0

J'ai quelques problèmes qui ont été soulevés avec l'utilisateur final de mon application en termes de validation des grilles que j'ai.Problèmes de validation UltraGrid

L'un des problèmes est que 2 des colonnes sont des colonnes Date, donc les cellules contiennent DatePickers pour permettre l'entrée de données. Cependant, l'utilisateur ne peut pas sélectionner la date actuelle dans ces cellules, pour quelque raison que ce soit. S'ils sélectionnent d'abord une date précédente/future, ils peuvent la changer à la date actuelle, mais ce n'est pas la chose la plus efficace à faire, bien sûr.

Y a-t-il une raison pour laquelle la grille ne permet pas de sélectionner la date actuelle sans sélectionner une date différente en premier?

Deuxièmement, les colonnes décimales ne valident pas correctement. Je définissant la propriété MaskInput de certaines colonnes de la méthode InitializeLayout, en utilisant le code suivant

e.Layout.Bands(0).Columns("currentRate").MaskInput = "{double:9.2}" 
e.Layout.Bands(0).Columns("newRate").MaskInput = "{double:9.2}" 

Cependant, en cliquant sur l'une de ces colonnes, la cellule affichera la chaîne {double: 9.2} (qui peut ne pas être supprimé), puis lorsque vous cliquez sur la cellule sans entrer de valeur, vous n'aurez qu'à afficher une cellule vide. La cellule ne permet également qu'un seul chiffre et une décimale, plutôt que 2 DP.

Quel est le problème avec le code que j'utilise? Le troisième et dernier problème n'est pas le plus vital, mais en cliquant sur les cellules, le texte de la cellule n'est pas automatiquement mis en surbrillance, l'utilisateur doit donc effacer chaque caractère pour effacer la cellule.

Comment puis-je faire en sorte qu'il sélectionne automatiquement le texte dans une cellule en cliquant sur la cellule?

Répondre

1

Vous pouvez facilement corriger votre dernier problème. Pour ce faire, obtenir l'éditeur de la cellule, où l'utilisateur a cliqué et appeler sur l'éditeur SelectAll méthode comme ceci:

private void UltraGrid_AfterEnterEditMode(object sender, EventArgs e) 
{ 
    var grid = sender as UltraGrid; 
    if(grid == null) 
     return; 

    var activeCell = grid.ActiveCell; 
    if(activeCell == null) 
     return; 

    var editor = activeCell.EditorResolved; 
    if(editor == null) 
     return; 

    editor.SelectAll(); 
} 

En ce qui concerne vos deux premières questions, à mon humble avis ce n'est pas le comportement par défaut de la grille . La grille ne vous empêchera pas de sélectionner un jour quelconque depuis le menu déroulant du calendrier si vous ne lui avez pas dit de le faire, et elle affichera le numéro en fonction du masque fourni. Je peux donc vous suggérer de vérifier votre code pour voir si vous ne manipulez aucun événement forçant la grille à se comporter de cette manière.

+0

J'ai effectivement utilisé une méthode différente pour sélectionner le texte dans la grille, mais merci pour votre idée (j'utilise vb, pas C#, cependant). Avez-vous des idées sur ce qui pourrait causer les autres problèmes? Quel genre de code pourrait le surcharger? – Harambe

0

La façon dont je l'ai résolu le problème avec la sélection de texte était de faire ce qui suit:

Private Sub ugProducts_AfterEnterEditMode(sender As Object, e As EventArgs) Handles ugProducts.AfterEnterEditMode 

    Dim activeCell As UltraGridCell = ugProducts.ActiveCell 
    Dim editor = activeCell.EditorResolved 
    If editor IsNot Nothing Then 
     If TypeOf editor Is CheckEditor AndAlso TypeOf editor Is EditorWithCombo Then 
     Else 
      editor.SelectionStart = 0 
      editor.SelectionLength = activeCell.Text.Length 
     End If 
    End If 

End Sub 

Pour une raison quelconque, il ne permettrait pas l'utilisation de IsNot, donc je dû se contenter de Is avec un Else déclaration. Mais cela ferait l'affaire, ou pour les utilisateurs C#, utilisez la suggestion de @ wnvko.