Почему я не могу редактировать значения в моем DataGridView, даже если он не установлен в ReadOnly?
У меня есть DataGridView, который не установлен только для чтения. Ни один из его столбцов не установлен только для чтения, а объект, к которому он привязан, не установлен только для чтения. Тем не менее, я не могу редактировать элементы 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. Это особенно включает в себя крошечную стрелку в конструкторе форм в правом верхнем углу элемента управления. В раскрывающемся списке стрелка есть опция "включить редактирование", убедитесь, что она включена. Теперь в конструкторе форм измените столбцы каким-либо основным образом (например, добавьте или удалите столбец.) Вот и все, когда вы запускаете программу, вы должны найти, что редактирование GUI работает сейчас.
чтобы воспроизвести эту ошибку, в конструкторе форм используйте маленькую стрелку в правом верхнем углу элемента управления datagridview, чтобы установить "разрешить редактирование" в false. Теперь внесите существенные изменения в столбцы (например, добавьте или удалите столбец). Скомпилируйте и запустите программу. Теперь вернитесь к крошечной стрелке и снова включите флажок "Включить редактирование". Снова запустите программу. В этот момент появляется ошибка, и вы обнаружите, что datagridview не редактируется GUI, даже если вы настроили иначе в VS.
Как вы привязываетесь к вашему DataGridView? Одно дело, что если вы используете список Linq в качестве источника данных, запрашиваемого из базы данных, и у вас нет полного объекта, то свойства считываются только, если вы не укажете "с новым" в функции select. В вашем посте не так много информации. Надеюсь, это поможет.
Take datagridview
задача и нажмите на Редактировать столбец, затем задайте свойству только для чтения столбца значение False