【问题标题】:display list items into data grid view c#将列表项显示到数据网格视图中 c#
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

  • 然后我将如何在我的 ComboBox 中实现它?
  • 当组合框更改时,将您的数据源设置为过滤的会话集合。
  • 喜欢这个? ` if (cboMenu.SelectedIndex == 0) { // 使用数据填充 GridView dataDisplay.DataSource = allSessions; } else if (cboMenu.SelectedIndex == 1) { // 用数据填充 GridView dataDisplay.DataSource =cyclingSessions; } else { // 使用数据填充 GridView dataDisplay.DataSource = runningSessions; }`
  • 我没有得到任何回报
  • 还没有。我会用我的代码更新问题给你看。
猜你喜欢
  • 1970-01-01
  • 2018-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-09
  • 1970-01-01
  • 2011-11-30
  • 1970-01-01
相关资源
最近更新 更多