Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用扩展对象列表将数据绑定到数据网格视图_C#_.net_Winforms_Datagridview - Fatal编程技术网

C# 如何使用扩展对象列表将数据绑定到数据网格视图

C# 如何使用扩展对象列表将数据绑定到数据网格视图,c#,.net,winforms,datagridview,C#,.net,Winforms,Datagridview,我试图将List绑定到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
绑定到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> list = db.Members.ToList();
dataGridView1.DataSource = list;

期望:


您必须从
播放器
而不是
成员

List<Player> list = db.Players.ToList();
List List=db.Players.ToList();

您必须从
播放器
而不是
成员

List<Player> list = db.Players.ToList();
List List=db.Players.ToList();

您可以尝试将您的
成员
强制转换为
玩家
,如果成功,您可以将该值添加到网格中:

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
        ...
    }
}

希望这能让您了解如何将玩家分类并添加到网格中。

您可以尝试将您的
成员
转换为
玩家
,如果成功,您可以将该值添加到网格中:

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
        ...
    }
}

希望这能让您了解如何将玩家分类并添加到网格中。

如果使用
列表
集合,您需要给出一种类型,因此您可以尝试让
列表
转换为
列表

根据您的预期结果,
奖金
属性可以是
双倍?

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
列表中的girdview上的

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;
List List=db.Members.Select(x=>{
玩家p=x作为玩家;
如果(p!=null)
返回p;
返回新玩家()
{
id=x.id,
name=x.name,
薪金=x.薪金
};
});
dataGridView1.DataSource=列表;

如果使用
列表
集合,则需要提供一种类型,以便尝试将
列表
转换为
列表

根据您的预期结果,
奖金
属性可以是
双倍?

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
列表中的girdview上的

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;
List List=db.Members.Select(x=>{
玩家p=x作为玩家;
如果(p!=null)
返回p;
返回新玩家()
{
id=x.id,
name=x.name,
薪金=x.薪金
};
});
dataGridView1.DataSource=列表;

除非明确添加列(例如在designer中),否则将根据绑定列表的元素类型自动创建列。由于这是您的示例中的
成员
,因此网格将没有
薪资
列。因此,您可以创建一个列表,其中包含一些已转换的类,如下所示:

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();

除非明确添加列(例如在designer中),否则这些列将根据绑定列表的元素类型自动创建。由于这是您的示例中的
成员
,因此网格将没有
薪资
列。因此,您可以创建一个列表,其中包含一些已转换的类,如下所示:

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();


什么是
Senior
是类还是实例?对不起,我错了,我已经编辑了这篇文章。事实上,作为一名
高级
我的意思是
玩家
如果你只想使用
成员
属性值,
列表
应该足够了,我需要使用
成员
属性值和
玩家
属性值,我无法强制转换它,因为它会引发异常,因为它是
List
。正在寻找将其绑定到表的方法o您是说您有两个表一个用于
成员
,另一个用于
播放器
?我想你需要使用两个列表而不是一个什么是
Senior
是类还是实例?对不起,我错了,我已经编辑了这篇文章。事实上,作为一名
高级
我的意思是
玩家
如果你只想使用
成员
属性值,
列表
应该足够了,我需要使用
成员
属性值和
玩家
属性值,我无法强制转换它,因为它会引发异常,因为它是
List
。正在寻找将其绑定到表的方法o您是说您有两个表一个用于
成员
,另一个用于
播放器
?我想您需要使用两个列表,而不是一个。我以这种方式尝试过,但只返回
玩家
,但我需要
成员
玩家
,放在一个表中。有没有机会把它擦掉?那已经被其他朋友解决了。只有一个表
Member
。我尝试了这种方法,但只返回
Players
,但我需要将
Member
Player
放在一个表中。有没有机会把它擦掉?那已经被其他朋友解决了。只有一个表
成员
。我知道我可以强制转换这些对象,但我不知道如何将它们绑定到一个DataGrid我知道我可以强制转换这些对象,但我不知道如何将它们绑定到一个DataGrid谢谢,您的解决方案非常有效。只需添加
.ToList()
方法谢谢,您的解决方案运行良好。只需添加
.ToList()
方法谢谢您的解释。稍长一点,但也能很好地工作。将在未来几周内停止,以便解释。稍长一点,但也能很好地工作。将在未来停止