【发布时间】:2015-12-29 22:19:34
【问题描述】:
我有一个动态生成的 DataTable 有一堆不同的值:
Column1 | Column2 | Column3
----------------------------
230 | 265 | 272
270 | 235 | 235
250 | 235 | 254
250 | 225 | 259
我想以这种方式显示每个单元格的数据:
- 列中的每个单元格值应表示为列总数的百分比值。
例如,我想显示23.00%,而不是上表中Column1 的第一个单元格中的230。它应该这样计算:
First Cell of Column 1: 23.00% = (230 / (230 + 270 + 250 + 250)) * 100
例如,对于上表,结果应该是:
Column1 | Column2 | Column3
-----------------------------
23.00% | 27.60% | 26.67%
27.00% | 24.48% | 23.04%
25.00% | 24.48% | 24.90%
25.00% | 23.44% | 25.39%
这是我使用的解决方案。 dtTab.Columns.Add("TotalQty", GetType(Double))
Dim results As IEnumerable(Of Tuple(Of Object, Double)) = dtTab.Rows _
.Cast(Of DataRow) _
.GroupBy(Function(s As DataRow) s.Item("DateLabel")) _
.SelectMany(Function(rows) rows.Select(Function(row) Tuple.Create(row.Item("Date"), Convert.ToDouble(rows.Sum(Function(dataRow) Convert.ToDouble(dataRow.Item("QTY")))))))
For Each result As Tuple(Of Object, Double) In results
Dim dRow As DataRow() = dtTab.Select(String.Format("Date ='{0}' ", result.Item1.ToString()))
For Each row As DataRow In dRow
row.SetField(Of System.Nullable(Of Double))("TotalQty", result.Item2)
Next
Next
For Each row As DataRow In dtTab.Rows
Dim total As Double = row.Item("TotalQty")
total = Math.Round(total, 1)
row.SetField(Of System.Nullable(Of Double))("QTY", Convert.ToDouble(row.Item("QTY")) / total * 100)
Next
dtTab.Columns.Remove("TotalQty")
dtTab.AcceptChanges()
【问题讨论】:
-
在他们面前放一个 % 符号!
-
值可以是大数字,需要转换成百分比,我只是用简单的来保持问题简单..
-
问题已被编辑,并且很清楚 OP 现在在问什么。现在也不值得这么多的反对票。
标签: c# .net winforms datagridview datatable