Способ, которым я подошел к этому в недавнем приложении, заключался в создании моих собственных классов DataGridViewColumn и DataGridViewCell, наследующих один из существующих, таких как DataGridViewTextBoxColumn и DataGridViewTextBoxCell.
В зависимости от типа ячейки, которую вы хотите, вы можете использовать другие, такие как Button, Checkbox, ComboBox и т. Д. Просто взгляните на типы, доступные в System.Windows.Forms.
Ячейки относятся к своим значениям как к объектам, поэтому вы можете передать свой класс Car в значение ячейки.
Переопределение SetValue и GetValue позволит вам иметь любую дополнительную логику, необходимую для обработки значения.
Например:
public class CarCell : System.Windows.Forms.DataGridViewTextBoxCell
{
protected override object GetValue(int rowIndex)
{
Car car = base.GetValue(rowIndex) as Car;
if (car != null)
{
return car.Maker.Name;
}
else
{
return "";
}
}
}
В классе столбцов главное, что вам нужно сделать, - установить CellTemplate в свой пользовательский класс ячеек.
public class CarColumn : System.Windows.Forms.DataGridViewTextBoxColumn
{
public CarColumn(): base()
{
CarCell c = new CarCell();
base.CellTemplate = c;
}
}
Использование этих пользовательских столбцов / ячеек в DataGridView позволяет вам добавить множество дополнительных функций в ваш DataGridView.
Я использовал их для изменения отображаемого форматирования, переопределив GetFormattedValue, чтобы применить пользовательское форматирование к строковым значениям.
Я также сделал переопределение в Paint, чтобы можно было делать пользовательское выделение ячеек в зависимости от условий значения, изменяя ячейки Style.BackColor на то, что я хотел, основываясь на значении.