[英]C# Counting number occurences dataGridView
假设 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
是一个可以绑定到第二个数据网格的列表。 您当然可以投影到您定义的 class 类型。
更新
您可以直接使用 gridview 行,尽管它有点尴尬。 我鼓励您考虑阅读数据绑定 collections,但试试这个,它与我的第一个示例相同,它只是针对 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,你可以运行我的例子
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.