Обязательные наборы к DataGridView в Windows Forms

Я пытаюсь связать набор с DataGridView. Как оказалось, для пользователя невозможно отредактировать что-либо в этом DataGridView, хотя EditMode установлен на EditOnKeystrokeOrF2.
Вот упрощенный код:

public Supplies()
{
   InitializeComponent();
   List<string> l = new <string>();
   l.Add("hello");
   this.SuppliesDataGridView.DataSource = l;
}

Это также не работает, когда я изменяю тип набора на SortableBindingList, Словарь или даже использую BindingSource.

Что может быть неправильным здесь?

5
задан Mark G 26 September 2016 в 19:49
поделиться

3 ответа

Для меня следующий метод работает должным образом:

  • Откройте форму (пользовательский контроль и т. Д.) С помощью конструктора
  • Добавьте BindingSource в свой форма
  • Выберите BindingSource в форме и откройте страницу свойств
  • Выберите свойство DataSource и щелкните стрелку вниз
  • Щелкните Добавить источник данных проекта
  • Выберите Объект
  • Выберите тип объекта, который вы хотите обработать
    • Это должен быть тип, который будет обрабатывать ваша коллекция, а не сама CustomCollection!
  • Отобразите доступные источники данных, выбрав в строке меню Данные - Показать источники данных
  • Перетащите свой ItemType из источников данных в форме
  • Перейдите в код формы и привяжите CustomCollection к the BindingSource

      var cc = new CustomCollection (); 
    bindingSource1.DataSource = cc; 
     

Замечания :
DataGridView - это просто последняя часть вашей цепочки, позволяющая (не) разрешать изменение, добавление и удаление объектов из вашего списка (или CustomCollection). Также есть свойство AllowNew в BindingSource, а интерфейс ICollection имеет свойство IsReadOnly , которое должно быть установлено на false , чтобы разрешить редактирование. . И последнее, но не менее важное: свойства вашего класса в коллекции должны иметь общедоступный метод установки, позволяющий изменять значение.

5
ответ дан 14 December 2019 в 08:45
поделиться

Попробуйте следующее:

    public class CustomCollection { public string Value { get; set; } }

    public Supplies()
    {
        InitializeComponent();
        List<CustomCollection> l = new List<CustomCollection> { new CustomCollection { Value = "hello" } };
        this.SuppliesDataGridView.DataSource = l;
    }
2
ответ дан 14 December 2019 в 08:45
поделиться

После того, как вы установите свойство DataSource, вы захотите для запуска метода DataBind () .

this.SuppliesDataGridView.DataSource = l;
this.SuppliesDataGridView.DataBind();

ОБНОВЛЕНИЕ:

Как вы правильно заметили в комментариях, метод DataBind () не существует для этого элемента управления.

Эта ссылка может предоставить некоторую полезную информацию: http://msdn.microsoft.com/en-us/library/fbk67b6z%28v=VS.90%29.aspx

0
ответ дан 14 December 2019 в 08:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: