Почему я не могу редактировать значения в моем DataGridView, даже если он не настроен только для чтения?
У меня есть DataGridView, который не настроен только для чтения. Ни один из его столбцов не имеет значения ReadOnly, а объект, к которому он привязан, не имеет значения ReadOnly. Тем не менее, я не могу редактировать элементы DataGridView? То.Свойство DataSource объекта DataGridView имеет значение ReadOnlyCollection, но я могу программно изменять элементы, только не из пользовательского интерфейса. - Что происходит?
5 ответов:
Получается, что если ваш DataGridView привязан к коллекции ReadOnlyCollection, то даже если вы можете программно редактировать любой элемент в коллекции, DataGridView будет ограничивать вас от изменения значений. Я не уверен, что такое поведение намеренно, но его нужно остерегаться.
Это просто расширенный комментарий (следовательно, wiki) в противовес пункту" DataGridView будет ограничивать вас от изменения некоторых значений (строк), но не других значений (bools)"; ни один из них не редактируется; сделайте его
List<T>
и оба доступны для редактирования...: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 } } }); } }
Я установил VS 2013 только вчера, последняя сборка (обновление 5) и ошибка все еще остается, что вызывает поведение, которое вы описываете.
Короче говоря, чтобы обойти ошибку, сначала убедитесь, что datagridview настроен на возможность редактирования GUI. Это особенно относится к крошечной стрелке в конструкторе форм в правом верхнем углу элемента управления. В выпадающем списке со стрелкой есть опция "включить редактирование", убедитесь, что она включена. Теперь в конструкторе форм отредактируйте столбцы каким-либо основным способом (например, добавьте или удалите столбец). колонка). Вот и все, когда вы запускаете программу, вы должны обнаружить, что редактирование графического интерфейса теперь работает.
Чтобы воспроизвести эту ошибку, в конструкторе форм используйте крошечную стрелку в правом верхнем углу элемента управления datagridview, чтобы установить" включить редактирование " в значение false. Теперь внесите существенные изменения в столбцы (например, добавьте или удалите столбец). Скомпилируйте и запустите программу. Теперь вернитесь к крошечной стрелке и снова включите флажок "Включить редактирование". Снова запустите программу. В этот момент ошибка проявляет себя, и вы будете найдите, что datagridview не является редактируемым GUI, даже если вы настроили иначе в VS.
Как вы привязываетесь к вашему DataGridView? Во-первых, если вы используете список Linq в качестве источника данных, запрашиваемого из базы данных, и у вас нет полного объекта, то свойства доступны только для чтения, если вы не укажете "with new" в функции select. В вашем посте не так много информации. Надеюсь, это поможет.
Возьмите задачу
datagridview
и нажмите кнопку Изменить столбец, затем Установите свойство столбца только для чтения в False