DataGridView: Modifier Modifier le Contrôle de la taille lors de l'édition
dans le DataGridView je veux de la taille des cellules à développer en fonction de la longueur de la chaîne quand j'ai modifier la cellule. Excel fait de même.
Dans le DataGridView, en entrant dans le mode d'édition, un DataGridViewTextBoxEditingControl est placé à la position de la cellule. J'ai essayé de changer les limites/taille de ce contrôle, mais le résultat est juste une courte distance de scintillement de ma taille désirée. Il obtient directement accepter la peinture à l'original, tronquée.
Aucune idée sur la façon d'obtenir ce travail?
Merci,
Timo
J'aimerais savoir aussi.
OriginalL'auteur | 2009-03-26
Vous devez vous connecter pour publier un commentaire.
Cette question est assez vieux mais j'espère que ma réponse vous aide à quelqu'un en bas de la route. J'ai couru à travers le même problème et a été en mesure d'utiliser un processus similaire à la suivante pour faire la largeur de la colonne de mise à jour de manière dynamique lorsque l'utilisateur a tapé, afin de s'assurer que le texte de l'ajustement de la colonne.
Événements utilisés:
CellBeginEdit
CellEndEdit
EditingControlShowing
TextBoxKeyPressEvent
(c'est à direKeyPress
)REMARQUE: Le code suivant suppose que
AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells
EDIT: mise à Jour de la
TextBoxKeyPressEvent
logique pour tenir compte de la touche retour arrière:Vous aviez raison que mon exemple ne pas prendre la touche retour arrière en compte. J'ai mis à jour mon post avec le code supplémentaire de la façon dont cela pourrait être manipulés. J'ai été à l'origine de la banque sur le fait que le contrôle de redimensionner automatiquement la colonne en fonction de la largeur minimale de la propriété et de la AutoSizeColumnsMode "AllCells," mais cela ne se produit après la modification est validée. Comme par le point C, vous avez raison, la Suppression de la clé devrait être capturés à l'aide de l'événement KeyDown. Expliqué ici: stackoverflow.com/questions/8188328/...
ok... une autre chose qui peut être une valeur de correction est que l'utilisation de
dataGridView1.CurrentCell.EditedFormattedValue
est peut-être un peu risqué, comme mentionné ici ce stackoverflow.com/questions/3207777/... peut-être mieux d'utiliserdataGridView1.EditingControl.Text
OriginalL'auteur VineAndBranches
Vous avez besoin pour commencer en remplaçant la DataGridViewCell.PositionEditingPanel Méthode. Vous avez besoin de redéfinir votre propre type de colonne et de votre propre type de cellule à accès à cette méthode.
Voici un exemple sur la façon de le faire, que de multiplier la taille du panneau d'édition (celui qui détient le contrôle de l'édition) par 2:
OriginalL'auteur Simon Mourier
C'était un travail pour moi:
Permettre
KeyPreview
Propriété de la forme et de modifier le corps deKeyPress
Cas de la forme:vous pouvez limiter les touches pressées avec
e.KeyChar
;OriginalL'auteur ARZ
Je l'ai mentionné dans mon autre réponse que j'avais deux solutions, c'est le MeasureString solution (par opposition à la seconde datagridview solution)
toute mention de la textbox1-5.texte de l'e.t.c. a été commenté, c'était juste pour le débogage.
cela, et pour l'autre solution, qui n'est pas juste redimensionner la colonne modification, il redimensionne également datagridview largeur, et la largeur d'un formulaire, mais vous pouvez facilement remarquer que si vous ne voulez pas que votre comportement.
Je devrais probablement avoir utilisé le mot " utilise le mot clé pour la création de l'objet graphique, mais de toute façon.
OriginalL'auteur barlop
J'ai trouvé quelques solutions pour ce
On utilise MeasureString et un datagridview , l'autre crée un autre datagridview aux fins de déterminer la largeur d'une cellule si la cellule ont été pour avoir ce contenu. L'autre(ma dernière) gère avec un datagridview et l'ajout et la suppression d'une ligne.
C'est le seul qui utilise un deuxième datagridview
Dessiner un datagridview sur un formulaire que je vous ai donné la mienne à deux pas de colonnes de données.
Le code va créer un deuxième datagridview également avec deux colonnes n'données.
Bien sûr le problème de l'interlocuteur rencontré était que sans la modification automatiquement de redimensionnement automatique, il n'est pas clair de quelle largeur pour définir la colonne. Cette solution crée un autre datagridview (appeler DGVb), celui-ci n'est ajouté à la forme. Et il écrit des données dans une cellule de DGVb, voit ce que la largeur de la cellule, et utilise cette figure que la figure pour l'ensemble de la cellule dans le bon DGV.
Un autre problème couvert par la vigne, c'est qu'avec la cellule de jeu pour un redimensionnement automatique, vous ne pouvez pas définir la largeur de colonne par programme, donc vous pouvez mettre le code sur quand la cellbeginedit événement est déclenché, pour définir la propriété autosize à aucun, et de mettre sur le dos quand cellendedit est déclenchée, et une autre chose est que parce que la définition d'aucun pourrait changer immédiatement la taille de la colonne un peu par exemple colonne1 avec autosize sur de peut-être 73 et puis quand vous vous tournez autosize à l'arrêt, elle va à 100, ainsi, vous pouvez stocker la taille avant de vous mettre à la propriété autosize à rien, puis mettre autosize à aucun et de définir la taille de ce qu'il était, de cette façon, la préservation de cet indésirable changement de taille. C'est ce qui est fait ici, comme couverte par la Vigne.
ce code s'élargit et se rétrécit de la colonne et ne pas avoir des faiblesses backdelete, avant de les supprimer ou les touches fléchées, même si, comme de l'écriture, de la vigne répondre a quelques faiblesses, avec ces clés. J'ai utilisé TextChanged afin d'éviter ces problèmes. (par opposition à keydown e.t.c.)
L'idée de l'expansion de la cellule en tant que texte est tapé est tout à fait un hack.. mais semble visuellement préférable à cette alternative.. qui est moins difficile à faire, mais n'a pas l'air aussi sympa, c'est d'avoir de la cellule d'élargir la taille sur cellbeginedit, (donc mis à autosize à aucun, et de définir le col de la largeur d'une certaine taille comme =50), et de le faire reculer à la taille - autosize - sur cellendedit) et puis je suppose que sur cellendedit pour augmenter datagridview largeur afin de ne pas obtenir une barre de défilement. Mais alors, le datagridview col des sauts de taille et il n'est pas agréable à utiliser.
en fait probablement le deuxième datagridview ne nécessite 2 cellules.. une pour tenir le max de que le col de la première datagridview , l'autre pour avoir la valeur de la cellule dans la première datagridview qui est en cours de modification. Et les polices peuvent être mis à celles des cellules correspondantes sur la première datagridview.
OriginalL'auteur barlop
Cette solution(mon dernier) utilise une technique similaire à la réponse qui utilise 2 datagridviews, mais il le gère avec juste un datagridview.
Ce qu'il fait, c'est quand le texte est tapé dans une cellule, il crée une nouvelle ligne, et entre ce texte dans la ligne à la colonne correspondante à l'intérieur de cette ligne. Puis il voit ce que la nouvelle largeur de la devrait être et il s'étend de la colonne pour que la largeur et la supprime de la ligne.
C'est un edit de ce que j'avais, qui améliore.. Depuis il s'est avéré que je pouvais commenter la cellbeginedit et cellendedit méthode. Et il a également constaté que, alors que le précédent était bien, une légère modification serait la cause de la bogue d'une cellule noire, et qui est mentionné ici. Tant que je suis de redimensionnement automatique de toutes les colonnes-je éviter le noir de la cellule. (et à l'aide de EditingControl.Texte que j'ai)
OriginalL'auteur barlop
Aimeriez-vous à la cellule de redimensionner comme vous le type? Ou aimeriez-vous pour redimensionner une fois que le texte est entré et entrez est atteint? La deuxième option est juste le plus facile.
Laissez-moi savoir.
Grâce
OriginalL'auteur lb.