J'ai un DataGridView, qui n'est pas défini sur ReadOnly. Aucune de ses colonnes n'est définie sur ReadOnly et l'objet auquel elle est liée n'est pas défini sur ReadOnly. Pourtant, je ne peux pas éditer les éléments DataGridView? La propriété .DataSource de DataGridView est définie sur une ReadOnlyCollection <>, mais je peux modifier par programmation les éléments, mais pas à partir de l'interface utilisateur. Que se passe-t-il?Pourquoi ne puis-je pas modifier les valeurs dans mon DataGridView, même s'il n'est pas défini sur ReadOnly?
Répondre
Il s'avère que si DataGridView est lié à une ReadOnlyCollection, alors même si vous pouvez modifier par programme n'importe quel élément de la collection, DataGridView vous empêchera de modifier les valeurs. Je ne suis pas sûr si ce comportement est intentionnel, mais c'est quelque chose à surveiller.
Impossible de reproduire ... voir ci-dessous. Avec ReadOnlyCollection <> aucun n'est modifiable ... –
Mon mauvais, il s'avère que "la colonne qui peut être changée" n'était pas liée correctement à la source de données tout le long. – GWLlosa
+1 Je regrette de ne pas avoir cherché le matin. Celui-ci m'a pris des heures à me cogner la tête contre le mur avant que je m'en aperçoive. – Rytmis
Ceci est juste un commentaire étendu (par conséquent wiki) en opposition à "le DataGridView vous empêchera de changer certaines valeurs (chaînes) mais pas d'autres valeurs (bools)" point; aucun n'est éditable; faire un List<T>
et les deux sont modifiables ...:
using System;
using System.Collections.ObjectModel;
using System.Windows.Forms;
class Test
{
public string Foo { get; set; }
public bool Bar { get; set; }
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
var data = new ReadOnlyCollection<Test>(
new[] {
new Test {Foo="abc", Bar=true},
new Test {Foo="def", Bar=false},
new Test {Foo="ghi", Bar=true},
new Test {Foo="jkl", Bar=false},
});
Application.Run(
new Form {
Text = "ReadOnlyCollection test",
Controls = {
new DataGridView {
Dock = DockStyle.Fill,
DataSource = data,
ReadOnly = false
}
}
});
}
}
Oups. Il s'avère que la "colonne modifiable" était en fait une faute de frappe dans le code de liaison de données, il s'agissait donc "de la seule colonne modifiable qui n'était pas liée à la source de données tout le temps". – GWLlosa
Comment liez-vous à votre DataGridView? Une chose est que si vous utilisez une liste Linq comme source de données interrogée à partir d'une base de données et que vous n'avez pas l'objet complet, alors les propriétés sont readonly sauf si vous spécifiez "with new" dans la fonction select. Il n'y a pas beaucoup d'informations dans votre message. J'espère que ça aide.
Prenez datagridview
tâche et cliquez sur la colonne d'édition puis set the column Read Only Property to False
J'ai installé VS 2013 plus tard qu'hier, dernière version (mise à jour 5) et un bogue reste qui cause le comportement que vous décrivez.
En bref, pour contourner le bogue, assurez-vous d'abord que la vue datagridview est paramétrable par l'interface graphique. Cela inclut en particulier la petite flèche dans le concepteur de formulaire en haut à droite du contrôle. Dans la flèche déroulante est une option "activer l'édition", assurez-vous qu'il est activé. Maintenant, dans le concepteur de formulaire, modifiez les colonnes de manière importante (par exemple, ajoutez ou supprimez une colonne). Voilà, lorsque vous exécutez le programme, vous devriez trouver que la modification de l'interface graphique fonctionne maintenant.
Pour reproduire ce bogue, dans le concepteur de formulaires, utilisez la petite flèche en haut à droite du contrôle datagridview pour définir "enable editing" sur false. Apportez maintenant une modification majeure aux colonnes (comme ajouter ou supprimer une colonne). Compile et éxecute le programe. Revenez maintenant à la petite flèche et réactivez la case "Activer l'édition". Encore une fois lancer le programme. À ce stade, le bogue se manifeste, et vous constaterez que le datagridview n'est pas modifiable par l'interface graphique, même si vous avez configuré autrement dans le VS.
- 1. MaximizeBox défini sur false ne fonctionne pas
- 2. Pourquoi AddMonths() ne fonctionne pas sur mon DateTime? (Voir code)
- 3. Pour les ressources C#, pourquoi Properties n'est pas défini?
- 4. Les cookies ne sont pas correctement défini dans PHP Script
- 5. Pourquoi mon code PHP ne "dissociera" pas les fichiers texte?
- 6. ReadOnly rows in DataGridView
- 7. C# Hashtable ne conserve pas les valeurs
- 8. Pourquoi FindControl ne fonctionne pas avec mon répéteur?
- 9. ContextMenu ne s'affiche pas, et je ne sais pas pourquoi
- 10. Pourquoi memcache ne fonctionne pas dans mon Django?
- 11. Données ne renvoyant pas les valeurs d'Excel (valeurs des formules)
- 12. Pourquoi @contenteditable ne fonctionne pas sur l'iPhone?
- 13. Mon déclencheur MySQL après INSERT ne fonctionne pas? Pourquoi?
- 14. Pourquoi ne puis-je pas modifier mes paramètres régionaux?
- 15. DataGridView CellPainting ne fonctionne pas entièrement sur Scroll
- 16. Pourquoi mon processus K2 n'apparaît-il pas dans les rapports?
- 17. Pourquoi ne pas définir IGNORE_DUP_KEY sur ON?
- 18. Marquer les classes exportées dans Eclipse pour ne pas modifier
- 19. Pourquoi mon JFrame ne se cache-t-il pas?
- 20. Pourquoi mon bookmarklet ne fonctionne-t-il pas?
- 21. Pourquoi ne puis-je pas parcourir mon site Web ASP.NET?
- 22. WebForm_InitCallback n'est pas défini
- 23. SPListItem dans FormsLib ne gère pas les valeurs vides
- 24. Pourquoi mon expression ternaire ne fonctionne-t-elle pas?
- 25. JSON n'est pas défini, Chrome
- 26. Pourquoi ne puis-je pas modifier mon application Web ASP.NET au moment de l'exécution?
- 27. Pourquoi mon service WCF ne répond pas à mon paramètre baseAddress dans web.config?
- 28. Pourquoi je ne peux pas utiliser mon serveur apache?
- 29. Pourquoi mon Unicode ne fonctionne-t-il pas sous Passenger?
- 30. Pourquoi mon application Django ne fonctionne pas avec Apache/mod_python?
Comment essayez-vous d'éditer les éléments? Quels sont les comportements que vous pensez que vous devriez voir que vous ne voyez pas? – David