Связывание коллекций с DataGridView в Windows Forms - PullRequest
5 голосов
/ 25 апреля 2010

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

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

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

Что здесь может быть не так?

Ответы [ 3 ]

5 голосов
/ 27 апреля 2010

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

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

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

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

2 голосов
/ 27 апреля 2010

Попробуйте это:

    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;
    }
0 голосов
/ 25 апреля 2010

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

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

UPDATE:

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

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

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