首页 > 解决方案 > 将列表项显示到数据网格视图中 c#

问题描述

我有一个超类(抽象),然后是 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;
        }
    }

标签: c#listdatagridview

解决方案


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

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

推荐阅读