К сожалению, DataGridView
не будет знать, что делать с «Классом» в «Классе». Та же идея применяется, если в качестве свойства класса «Device» был «List». Сетка будет интерпретировать класс / список как «множественные» объекты и не будет «разбирать» эти объекты на отдельные столбцы. Возможно, сторонняя сетка может сделать это.
Я не буду утверждать, что если у Класса есть только одни объекты, не относящиеся к типу коллекции, он будет выполнять этот простой анализ ... к сожалению, из коробки DataGridView
выиграл не делай этого для тебя. Ваш код должен будет «сгладить» данные, чтобы все они отображались в сетке.
Как вы прокомментировали, простое исправление состоит в том, чтобы переопределить метод ToString
категории, чтобы получить строку с «обоими Значения объединены. Это вернет данные, но, как вы заметили, «оба» значения будут находиться в «одном столбце».
public class Category {
public int Id { get; }
public string Name { get; }
public Category(int id, string name) {
Id = id;
Name = name;
}
public override string ToString() {
return Id + ", " + Name;
}
}
Учитывая это, я думаю, что будет проще написать метод «сгладить» данные и вернуть DataTable
со всеми полями. Однако, учитывая, что имеется только два (2) поля, класс Device
может также иметь свойства Category
. Например, если вы зададите свойство Category
класса Device
private
, то откроете два свойства Cataegory
в классе Device
. Что-то вроде….
class Device {
public int Id { get; }
public string Name { get; set; }
private Category _Category { get; set; }
public Device(int id, string name, Category category) {
Id = id;
Name = name;
_Category = category;
}
public int CatID {
get {
return _Category.Id;
}
}
public string CatName {
get {
return _Category.Name;
}
}
}
Я держу пари, что выделенный метод «сгладит» данные и вернет DataTable
будет лучшим подходом, как уже упоминалось, так как есть только два поля, выше решение должно работать.
Надеюсь, что имеет смысл.