Я пытаюсь связать набор с DataGridView. Как оказалось, для пользователя невозможно отредактировать что-либо в этом DataGridView, хотя EditMode установлен на EditOnKeystrokeOrF2.
Вот упрощенный код:
public Supplies()
{
InitializeComponent();
List<string> l = new <string>();
l.Add("hello");
this.SuppliesDataGridView.DataSource = l;
}
Это также не работает, когда я изменяю тип набора на SortableBindingList, Словарь или даже использую BindingSource.
Что может быть неправильным здесь?
Для меня следующий метод работает должным образом:
Перейдите в код формы и привяжите CustomCollection к the BindingSource
var cc = new CustomCollection ();
bindingSource1.DataSource = cc;
Замечания :
DataGridView - это просто последняя часть вашей цепочки, позволяющая (не) разрешать изменение, добавление и удаление объектов из вашего списка (или CustomCollection). Также есть свойство AllowNew
в BindingSource, а интерфейс ICollection
имеет свойство IsReadOnly
, которое должно быть установлено на false
, чтобы разрешить редактирование. . И последнее, но не менее важное: свойства вашего класса в коллекции должны иметь общедоступный метод установки, позволяющий изменять значение.
Попробуйте следующее:
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;
}
После того, как вы установите свойство DataSource, вы захотите для запуска метода DataBind ()
.
this.SuppliesDataGridView.DataSource = l;
this.SuppliesDataGridView.DataBind();
ОБНОВЛЕНИЕ:
Как вы правильно заметили в комментариях, метод DataBind () не существует для этого элемента управления.
Эта ссылка может предоставить некоторую полезную информацию: http://msdn.microsoft.com/en-us/library/fbk67b6z%28v=VS.90%29.aspx