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()
方法谢谢您的解释。稍长一点,但也能很好地工作。将在未来几周内停止,以便解释。稍长一点,但也能很好地工作。将在未来停止