在数据网格视图中显示列表项c#

时间:2020-11-03 20:03:08

标签: c# list datagridview

我有一个超类(抽象类),然后有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,它从列表中获取所有内容,并显示如下: enter image description here

我现在的问题是,我只想显示特定的数据,具体取决于您在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;
        }
    }

1 个答案:

答案 0 :(得分:1)

您需要过滤会话列表并将其设置为数据源,您可以使用OfType中的System.Linq轻松过滤列表。看起来像这样:

var sessions = new List<Sessions>();
var cyclingSessions = sessions.OfType<Cycling>();
var runningSessions = sessions.OfType<Running>();
dataDisplay.DataSource = cyclingSessions;