【问题标题】:C# Counting number occurences dataGridViewC# 计算出现次数 dataGridView
【发布时间】:2021-05-16 04:12:34
【问题描述】:

我正在尝试计算一些给定数字的出现次数,如图所示。

给我想要输出的程序5个数字

Número - 频率 R - 频率 A (1 - 2 - 0.4) (2 - 1 - 0.2) (3 - 2 - 0.4)

Frequência R 是数字出现的次数。

我的问题是计算数字的出现次数并使用正确的值设置单元格。

Frequência A 是相同的,因为我需要它出现的次数除以总行数。

我该怎么做?

【问题讨论】:

  • 如何填充网格?数据表?列表?循环和创建 DataRows?
  • 我正在初始化左边的那个,我用 dataGridView1.Columns.Add("N", "Nome"); 输入数字并在运行时通过应用程序本身添加数字。右边的是 dataGridView2.Columns.Add("X", "Número"); dataGridView2.Columns.Add("Y", "Frequência R"); dataGridView2.Columns.Add("Z", "Frequência A");当按下“频率”按钮时

标签: c# datagridview counting


【解决方案1】:

假设 dataGridView1 绑定到 DataTable(在我的示例中为dt),或者可以,您可以做一些 Linq 功夫来投影另一个可以绑定到第二个网格的集合:

var projection = dt.AsEnumerable()
    .Select(n => n.Field<decimal>("Nome"))
    .GroupBy(d => d)
    .Select(d => new { Numero = d.Key, FrequenciaR = d.Count(), FrequenciaA = (decimal)d.Count() / dt.Rows.Count })
    .ToList();

此代码获取 Nomes 列表并按其值对它们进行分组。此时您将拥有 3 个 IGrouping。然后Select 投影组的键(数字),组中有多少的计数,最后是数字除以表中的行数。

projection 是一个可以绑定到第二个数据网格的列表。您当然可以投影到您定义的类类型中。

更新

您可以直接使用 gridview 行,但有点尴尬。我鼓励您考虑阅读数据绑定集合,但试试这个与我的第一个示例相同,它只是针对 DataGridViewRowCollection 执行此操作:

var projection2 = dataGridView1.Rows.Cast<DataGridViewRow>()
    .Where(dgvr => dgvr.Cells[0].Value != null) // don't count blank rows
    .Select(dgvr => (decimal)dgvr.Cells[0].Value )
    .GroupBy(d => d)
    .Select(d => new { Numero = d.Key, FrequenciaR = d.Count(), FrequenciaA = (decimal)d.Count() / (dataGridView1.Rows.Count - 1) }) // count - 1 to exclude last edit row
    .ToList();

如果你有 LINQPad,你可以run my example

【讨论】:

  • 我将表格添加为 DataTable dt = new DataTable();现在我将如何访问投影内的东西?
  • 对不起,我可能表达得不好。我有 2 个 dataGridViews,左侧是我输入值的地方,右侧是它们将被发送到的地方。为了在右侧填充它们,我使用 dataGridView2.Rows.Add(projection, projection, projection);,在获取每一行的 foreach 内。我的问题是获取 Numero、FrequenciaR 和 FrequenciaA 的值。另外,感谢您的所有帮助。
  • 我建议不要使用 dataGridView2.DataSource = projection2;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多