Mam DataGridView, który nie jest ustawiony na ReadOnly. Żadna z jej kolumn nie jest ustawiona na wartość Tylko do odczytu, a obiekt, do którego jest przypisana, nie jest ustawiony na wartość Tylko do odczytu. Jednak nie mogę edytować elementów DataGridView? Właściwość .DataSource DataGridView jest ustawiona na ReadOnlyCollection <>, ale mogę programowo zmieniać elementy, ale nie z interfejsu użytkownika. Co się dzieje?Dlaczego nie mogę edytować wartości w moim DataGridView, mimo że nie jest ustawiony na ReadOnly?
Odpowiedz
Okazuje się, że jeśli DataGridView jest powiązany z ReadOnlyCollection, nawet jeśli można programowo edytować dowolny element w kolekcji, DataGridView będzie ograniczać możliwość zmiany wartości. Nie jestem pewien, czy to zachowanie jest zamierzone, ale jest czymś, na co trzeba uważać.
Nie można odtworzyć ... zobacz poniżej. Z ReadOnlyCollection <> żadna nie jest edytowalna ... –
Moja zła, okazuje się, że "jedna kolumna, którą można zmienić" faktycznie nie była poprawnie powiązana ze źródłem danych przez cały czas. – GWLlosa
+1 Żałuję, że nie szukałem SO rano. To zajęło mi godziny uderzania głową o ścianę, zanim się zorientowałem. – Rytmis
To jest tylko rozszerzony komentarz (stąd wiki) w przeciwieństwie do "DataGridView ograniczy się do zmiany niektórych wartości (ciągi znaków), ale nie innych wartości (boole)" punkt; ani nie można edytować; sprawiają, że List<T>
i oba są edytowalne ...:
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
}
}
});
}
}
Whoops. Okazuje się, że "jedna edytowalna kolumna" była właściwie literówką w kodzie powiązania danych, tak więc była to "jedyna edytowalna kolumna, która przez cały czas nie była związana ze źródłem danych.". – GWLlosa
Jak ty wiążący do DataGridView? Jedna rzecz polega na tym, że jeśli używasz listy Linq jako źródła danych przeszukiwanego z bazy danych i nie masz kompletnego obiektu, to właściwości są tylko do odczytu, chyba że wybierzesz "z nowym" w funkcji wyboru. W Twoim poście nie ma zbyt wielu informacji. Mam nadzieję, że to pomoże.
Take datagridview
zadanie i kliknij przycisk Edytuj kolumny następnie set the column Read Only Property to False
I zainstalowane VS 2013 wczoraj, najnowszy build (update 5) i błąd nadal powoduje, że zachowanie, które opisują.
W skrócie do obejścia błędu, najpierw upewnij się, że datagridview jest ustawiony do edycji GUI. Obejmuje to w szczególności małą strzałkę w projektancie formularzy w prawym górnym rogu formantu. W menu rozwijanym ze strzałką znajduje się opcja "włącz edycję", upewnij się, że jest włączona. Teraz w projektancie formularzy edytuj kolumny w jakiś poważny sposób (np. Dodaj lub usuń kolumnę). To wszystko, kiedy uruchamiasz program, powinieneś znaleźć edycję GUI.
Aby odtworzyć ten błąd, w projektancie formularzy użyj małej strzałki w prawym górnym rogu kontrolki datagridview, aby ustawić opcję "Włącz edycję" na wartość false. Teraz wprowadź istotną zmianę w kolumnach (np. Dodaj lub usuń kolumnę). Skompiluj i uruchom program. Teraz wróć do małej strzałki i ponownie zaznacz pole "włącz edycję". Ponownie uruchom program. W tym momencie błąd przejawia się, a przekonasz się, że datagridview nie jest edytowalny GUI, mimo że w VS skonfigurowano inaczej.
- 1. ostrzeżenie, że straż wzór nie jest wyczerpująca, mimo że jest
- 2. Dlaczego mogę używać mojego konstruktora wartości, mimo że go nie eksportuję?
- 3. ICommand.CanExecute przepuszcza zerowy mimo CommandParameter jest ustawiony
- 4. Dlaczego nie mogę edytować metody zawierającej anonimową metodę w debugerze?
- 5. Obraz nie jest całkowicie biały, mimo że jest poprawnie biały
- 6. $ GOPATH nie może być ustawiony na $ GOROOT, dlaczego nie?
- 7. Dlaczego ten kod działa, mimo że nie ma otwartego klamry?
- 8. Dlaczego wymagany jest constexpr, mimo że funkcja member jest constexpr?
- 9. Dlaczego nie mogę zainstalować żadnych klejnotów na moim Macu?
- 10. Process.Exited nie jest wywoływany, mimo że EnableRaisingEvents ma wartość true
- 11. .htaccess nie działa, mimo że allowoverride jest włączone
- 12. Komunikat nie może importować docker-py, mimo że jest zainstalowany
- 13. Nie można wyodrębnić kluczy Geo, mimo że GeoJSON jest ważny.
- 14. Dlaczego jako współadministrator subskrypcji nie mogę edytować Active Directory?
- 15. "Wymagany" textarea atrybut nie działa, mimo że wartość jest pusta
- 16. Dlaczego moja strefa czasowa nie jest zapisywana w moim NSDate?
- 17. Thread.CurrentPrincipal ustawiony w Application_AuthenticationRequest nie jest ustawiony później w aplikacji
- 18. Jakie anty wzorce używasz, mimo że wiesz, że nie powinieneś?
- 19. Rcpp: dlaczego nie mogę uruchomić funkcji w moim zdefiniowanym pakiecie?
- 20. Dlaczego szpieg Jasmine nie uważa, że został wywołany, mimo że zwrócił wartość andReturn?
- 21. Dlaczego nie mogę wybrać komórek w moim datagrid WPF?
- 22. LINQ-do-XML do DataGridView: Nie można edytować pól - Jak naprawić?
- 23. ViewController nie wyświetla się mimo, że został uruchomiony procesor
- 24. Jak mogę powiedzieć, że `ConcurrentDictionary.GetOrAdd` nie dodaje wartości?
- 25. Dlaczego metoda Dispose() nie jest dostępna w moim obiekcie IDisposable?
- 26. Dlaczego nie mogę użyć // - stylu komentarzy w moim kodzie C?
- 27. Angular.JS: dlaczego nie można edytować danych wejściowych?
- 28. funkcja "onclick" jest wywoływana, mimo że nie jest ustawiona w przycisku
- 29. Błąd braku pamięci PHP, mimo że nie osiągnięto limitu pamięci
- 30. Dlaczego PHP w systemie Windows nie może wyświetlić rozszerzenia php_intl.dll, mimo że istnieje?
Jak próbujesz edytować elementy? Jakie zachowania uważasz, że powinieneś zobaczyć, czego nie widzisz? – David