【问题标题】:Sort Datagridview with datasource a list使用数据源列表对 Datagridview 进行排序
【发布时间】:2016-12-05 18:41:18
【问题描述】:

我有一个 Datagridview (dataGridView1),数据源是一个列表 (Bets)。我想按列值升序(奇数1)对其进行排序。我该怎么做?

编辑:也许我应该在填充 datagridview 之前订购列表?有什么建议吗?

EDIT2:我得到了解决方案,但数字的进度有误。查看图片:

在 1.99 之后,我想要 2.00 instea 的 10.57。我该怎么做?

EDIT3:这是我的课:

公共字符串奇数1 { 得到 { 返回 (Odds.Count >= 3) ?赔率[0]:“错误”; } 设置 { if (Odds.Count >= 3) Odds[0] = value; } }

public string oddX
{
    get { return (Odds.Count >= 3) ? Odds[1] : "error"; }
    set { if (Odds.Count >= 3) Odds[1] = value; }
}

public string odd2
{
    get { return (Odds.Count >= 3) ? Odds[2] : "error"; }
    set { if (Odds.Count >= 3) Odds[2] = value; }
}

【问题讨论】:

  • 我通常将它附加到我所有的数据网格视图中,它是一个额外的行,并为您提供一些非常好的基本功能codeproject.com/Articles/33786/DataGridView-Filter-Popup
  • 我明白了,我会检查一下,谢谢。无论如何,我希望有人可以在这里建议我一个解决方案:) 再次感谢
  • 另外,如果您只是想在它进入网格之前对其进行排序,只需在将其分配为数据源之前按该字段对列表进行排序
  • 是的,但是当数据源是列表时我不知道该怎么做。使用数据库更简单,但我不需要使用它,所以我试图找到一个解决方案,以便在进入 datagridview 之前订购此列表
  • 您比较字符串,它们在数据网格中正确显示。您必须将字符串比较为 double/float。

标签: c# list datagridview


【解决方案1】:

您可以在设置 gridView 的数据源之前简单地使用 Linq:

编辑:由于odd1的类型是字符串,所以需要将其转换为数字才能得到想要的结果。由于并非所有数字都有效,因此您需要进行一些检查才能获得所需的结果。

list = list.OrderBy(x=> ConvertFromString(x.odd1)).ToList();

定义一个方法:

private decimal ConvertFromString(string str)
{
    decimal val = decimal.MaxValue;

    if (decimal.TryParse(str, out val))
        return val;
    else
        return decimal.MaxValue;
}

或就地排序而不创建新列表:

list.Sort((x, y) =>  (int)(Decimal.Parse(x.odd1) -  Decimal.Parse(y.odd1)));

【讨论】:

  • 它工作正常,谢谢,但有一个小问题。请检查我的问题中的edit2
  • @Marci 这是因为 odd1 的类型是字符串而不是十进制。检查编辑后的答案。
  • 我收到此错误:输入字符串格式不正确
  • @Marci 你有空值或不是数字的值吗?
  • 我用我班上关于odd1、oddx 和odd2 的一篇文章来编辑我的问题。他们只有数字
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-21
  • 1970-01-01
  • 2015-10-26
  • 2012-06-07
  • 2010-12-14
  • 2017-05-18
  • 2012-04-27
相关资源
最近更新 更多