我有一个超类(抽象类),然后有2个继承的类。
超级课堂:会议
第1类:骑自行车
第2类:运行
我还有一个列表,其中包含所有对象
private List<Session> allSessions = new List<Session>();
我还声明了一些包含硬编码数据的数组以填充对象。
此外,“跑步和骑自行车”有一个覆盖的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()
不会添加到列表中,并且每当我从组合框选择其他选项时,都不会显示任何内容。
编辑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;
}
}
答案 0 :(得分:1)
您需要过滤会话列表并将其设置为数据源,您可以使用OfType
中的System.Linq
轻松过滤列表。看起来像这样:
var sessions = new List<Sessions>();
var cyclingSessions = sessions.OfType<Cycling>();
var runningSessions = sessions.OfType<Running>();
dataDisplay.DataSource = cyclingSessions;