Почему я не могу редактировать значения в моем DataGridView, даже если для него не установлено значение ReadOnly? - PullRequest
8 голосов
/ 27 мая 2009

У меня есть DataGridView, который не установлен на ReadOnly. Ни один из его столбцов не имеет значения ReadOnly, а объект, с которым он связан, не имеет значения ReadOnly. Но я не могу редактировать элементы DataGridView? Свойство .DataSource объекта DataGridView установлено в ReadOnlyCollection <>, но я могу программно изменять элементы, но не из пользовательского интерфейса. Что происходит?

Ответы [ 5 ]

10 голосов
/ 27 мая 2009

Оказывается, что если ваш DataGridView связан с коллекцией ReadOnlyCollection, то даже если вы можете программно редактировать любой элемент в коллекции, DataGridView ограничит вас от изменения значений. Я не уверен, является ли это поведение преднамеренным, но на это стоит обратить внимание.

3 голосов
/ 15 июня 2016

Я установил VS 2013 только вчера, последняя сборка (обновление 5), и все еще остается ошибка, которая вызывает поведение, которое вы описываете.

Короче говоря, чтобы обойти эту ошибку, сначала убедитесь, что сетка данных настроена для графического редактирования. Особенно это касается крошечной стрелки в дизайнере форм в правом верхнем углу элемента управления. В выпадающей стрелке есть опция «включить редактирование», убедитесь, что она включена. Теперь в конструкторе форм отредактируйте столбцы некоторым основным способом (например, добавьте или удалите столбец). Вот и все, когда вы запустите программу, вы увидите, что редактирование графического интерфейса работает.

Чтобы воспроизвести эту ошибку, в конструкторе форм используйте крошечную стрелку в правом верхнем углу элемента управления datagridview, чтобы установить для «enable edit» значение false. Теперь внесите значительные изменения в столбцы (например, добавьте или удалите столбец). Скомпилируйте и запустите программу. Теперь вернитесь к маленькой стрелке и снова установите флажок «включить редактирование». Снова запустите программу. В этот момент ошибка проявляется, и вы обнаружите, что представление данных не редактируется в графическом интерфейсе, даже если вы настроили иначе в VS.

3 голосов
/ 27 мая 2009

Это просто расширенный комментарий (следовательно, вики) в противоположность точке «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
                    }
                }
            });
    }
}
2 голосов
/ 27 мая 2009

Как вы привязываетесь к вашему DataGridView? Во-первых, если вы используете список Linq в качестве источника данных, запрашиваемого из базы данных, и у вас нет полного объекта, тогда свойства доступны только для чтения, если вы не укажете «с новым» в функции выбора. В вашем посте не так много информации. Надеюсь, это поможет.

0 голосов
/ 11 февраля 2016

Возьмите datagridview задание и нажмите на столбец редактирования, затем установите для свойства Только для чтения значение False

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...