【发布时间】:2020-11-03 20:03:08
【问题描述】:
我有一个超类(抽象),然后是 2 个继承的类。
超类:会话
第 1 类:骑自行车
第 2 课:跑步
我还有一个包含我所有对象的列表private List<Session> allSessions = new List<Session>();
我还声明了一些包含硬编码数据的数组来填充我的对象。
此外,Running 和 Cycling 有一个被覆盖的 ToString() 方法,该方法根据类显示不同的数据。
public override string ToString() => $"Cycle Average RPM is {AverageRpm} and Average Resistance is {AverageResistance}";
我正在使用 for 循环创建新对象并将其添加到我的列表中,如下所示
for (int i = 0; i < id.Length; i++)
{
Cycling Cycle = new Cycling(id[i], titles[i], date[i], duration[i], difficulty[i], instructor[i],
description[i], averageRpm[i], averageResistance[i]);
// Add new objects to list
allSessions.Add(Cycle);
}
我有一个 dataGridView,它从我的列表中获取所有内容并显示如下:
我现在的问题是,我只想根据您在 ComboBox 中选择的内容显示特定数据,但有些东西不起作用,
由于某种原因,被覆盖的 ToString() 未添加到列表中,每当我从 ComboBox 中选择不同的选项时,都不会显示任何内容。
编辑 1:
// Filter Sessions by type using Linq
var sessions = new List<Session>();
var cyclingSessions = sessions.OfType<Cycling>();
var runningSessions = sessions.OfType<Running>();
listBox1.DataSource = null;
listBox1.Items.Clear();
if (cboMenu.SelectedIndex == 0)
{
// Populate GridView with data
dataDisplay.DataSource = allSessions;
}
else if (cboMenu.SelectedIndex == 1)
{
// Populate GridView with data
dataDisplay.DataSource = cyclingSessions;
}
else
{
// Populate GridView with data
dataDisplay.DataSource = runningSessions;
}
}
【问题讨论】:
-
您需要创建一个过滤的
allSessions并将该集合设置为您的数据源。现在,您在代码中没有任何内容正在过滤您是 allSessions 列表,并且您尝试为每个不起作用的单独项目设置数据源。 -
@JSteward 以及如何过滤列表。它必须按对象的类型过滤?例如骑自行车和跑步?
-
在您编辑的代码中
sessions是一个空列表,您是否在过滤之前对其进行了初始化? -
是的,你必须枚举结果才能得到一个集合,尝试在结果上调用
ToList()
标签: c# list datagridview