Как привязать данные к Data-grid-view, используя List с расширенными объектами - PullRequest
0 голосов
/ 26 октября 2018

Я пытаюсь привязать List<Member> к DataGrid, но не знаю, как это сделать.У меня есть два класса:

public class Member
{
    public int id { get; set; }
    public string name { get; set; }
    public double salary { get; set; }
}

public class Player : Member
{
    public double bonus { get; set; }
}

List<Member> содержит объекты Member и Player.Я знаю, что должен привести Member объект к Player, где это необходимо.Я не знаю, как это сделать в одном списке.

Если я связываю List <Member>, он отображает только Member переменные и их значения без дополнительных полей, если объект, на самом деле, является Player,Должен ли я повторить это и как?

Вот как я собираю их сейчас:

List<Member> list = db.Members.ToList();
dataGridView1.DataSource = list;

Возврат:

Member
Player 

Output

Ожидание:

Expect

Ответы [ 4 ]

0 голосов
/ 26 октября 2018

Если вы не добавите столбцы явно (например, в конструкторе), столбцы создаются автоматически из типа элемента связанного списка. Поскольку в вашем примере это Member, в сетке не будет столбца Salary. Поэтому, возможно, вы можете создать список некоторого преобразованного класса, созданного так:

public class MemberViewModel
{
    private Member member;
    public MemberViewModel(Member member) => this.member = member;

    public int Id => member.id;
    public string Name => member.name;
    public double Salary => member.salary;
    public double? Bonus => member is Player player ? player.bonus : default(double?);
}

А потом:

dataGridView1.DataSource = myOriginalMemberList.Select(member => new MemberViewModel(member)).ToList();
0 голосов
/ 26 октября 2018

Вы можете попытаться привести ваше Member к Player, и, если оно окажется успешным, вы можете добавить это значение в сетку:

foreach(var record in list)
{
    var player = record as Player; // try to cast your record to Player
    if (player != null)
    {
        // if it is a player do something with it
        ...
    }
}

Надеюсь, это даст вам представление о том, как вы можете справиться с делом и добавить игроков в сетку.

0 голосов
/ 26 октября 2018

Вам нужно указать один тип, если вы используете List collection, поэтому вы можете попробовать List<Member> преобразовать в List<Player>

от ожидаемого результата bonus свойство может быть double?

public class Member
{
    public int id { get; set; }
    public string name { get; set; }
    public double salary { get; set; }
}

public class Player : Member
{
    public double? bonus { get; set; }
}

Привязка к гирдвью по списку Player.

List<Player> list = db.Members.Select(x => {
Player p = x as Player;

    if (p != null)
        return p;

    return new Player()
    {
        id = x.id,
        name = x.name,
        salary = x.salary
    };
});
dataGridView1.DataSource = list;
0 голосов
/ 26 октября 2018

Вы должны извлечь данные из Player вместо Member

List<Player> list = db.Players.ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...