Весь этот код в методах CellFormatting и BindProperty кажется чрезмерным. Я имею в виду, что-то нужно в основном делать, но я думаю, что это уже сделано. Я реализую INotifyPropertyChanged в объекте, который я хочу привязать к строке сетки, и я помещаю эти объекты в BindingList. BindingList напрямую используется в качестве источника данных для сетки.
Этот подход означает немного больше ввода в основной класс сущности, который вы сопоставляете с сеткой, но я думаю, что он сохраняет намного больше в другом месте. Для реализации INotifyPropertyChanged в своем классе:
public class Entity: INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public Entity()
{
Selected = false;
}
private bool _selected;
public bool Selected
{
get
{
return _selected;
}
set
{
if (_selected != value)
{
_selected = value;
OnPropertyChanged(nameof(Selected));
}
}
}
protected virtual void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
Затем поместите колонку в сетке и дать ему DataPropertyName из «Selected», чтобы соответствовать имя свойства в Entity, которая должна появиться в этом столбце. Очевидно, добавьте все свойства, которые вы хотите использовать в своей сетке, соответствующие свойствам объекта.Ключ состоит в том, чтобы реализовать средство настройки свойств с вызовом PropertyChanged.
Это дает вам двухстороннюю привязку между сеткой и вашим списком объектов.
Мое личное мнение: даже это слишком много кода. Я постоянно нахожу себе такие вещи, которые делают очевидное: возьмите свойство по имени и сопоставьте его с чем-то другим, которое знает это имя (например, столбец сетки в этом примере). Я просто не понимаю, почему эти вещи не просто автоматически подключаются. Список и сетка должны иметь достаточный смысл для определения этой базовой схемы самостоятельно. нулевые строки кода. Хорошо, одна строка кода. Grid.Datasource = Список. Так вот как я это делаю. Мне бы хотелось узнать меньше путей кода, чтобы сделать это.
Спасибо за ответ. Как изменить текст заголовка? – ehh
@ehh Вы имеете в виду заголовок datagrid? Если да, вы можете изменить его в свойствах datagridview. –
Да, спасибо. Мне было интересно, можно ли это сделать как часть анонимного метода. Вместо того, чтобы иметь Servicename для «Service Name» (или другого синтаксиса) – ehh