DataGridView - что делает AllowUserToAddRows? - PullRequest
5 голосов
/ 14 сентября 2009

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

РЕДАКТИРОВАТЬ: кстати, я не мусор, похоже, что-то связано с использованием List в качестве источника данных DataGridView; маленькое «*» просто не появляется, если я связываюсь со списком.

Ответы [ 4 ]

5 голосов
/ 14 сентября 2009

Я решил эту проблему, изменив STMTTRN из списка в BindingList - список, похоже, имеет очень странное поведение при использовании в качестве источника данных (см. Мой другой недавний вопрос, который решается таким же образом).

Это в сгенерированном коде, но я уже изменил его с массива на список, так что BindingList едва ли представляет собой дополнительную проблему:)

2 голосов
/ 19 сентября 2012

Та же проблема для меня, и BindingList не решил ее, но ответ Мерлина подсказал мне возможное решение.

Заключение списка в BindingSource является важной частью решения (как также задокументировано в другом вопросе: Невозможно разрешить пользователю добавлять строки в DataGridView со списком <> Источник данных ).

И для меня отсутствующим шагом было то, что у класса объектов в моем списке не было открытого конструктора без параметров . Добавление конструктора без параметров позволило AllowUserToAddRows функционировать, как ожидалось.

Я получил подсказку об исключении, которое возникло при попытке ответить на вопрос Мерлина, сообщение о котором предполагает, что также возможно включить добавление строки, обработав событие AddingNew:

AddNew нельзя вызывать для типа «MyType». Этот тип не имеет открытый конструктор по умолчанию. Вы можете позвонить AddNew по типу «MyType» если вы обрабатываете событие AddingNew и создаете соответствующий объект.

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

2 голосов
/ 14 сентября 2009

Попробуй,

DataTable dt = new DataTable();
dt.Columns.Add("No", typeof(int));
dt.Columns.Add("Name");
dataGridView1.AllowUserToAddRows = true;
dataGridView1.EditMode = DataGridViewEditMode.EditOnKeystroke;
dataGridView1.DataSource = dt;

EDIT:

Взгляните на IBindingList

1 голос
/ 16 января 2010

У меня была такая же проблема.

Использование BindingSource в качестве источника данных DGV и установка свойства BindingSource AllowNew = True решили мою проблему.

Dim binding As New BindingSource
binding.DataSource = myList
binding.AllowNew = True
With DataGridView1
    .AutoGenerateColumns = False
    .DataSource = binding
End With
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...