Я динамически генерируемые DataTable
с кучей различных значений:Преобразования значений ячеек из DataTable в Проценты
Column1 | Column2 | Column3
----------------------------
230 | 265 | 272
270 | 235 | 235
250 | 235 | 254
250 | 225 | 259
Я хочу показать данные каждого ячейки таким образом:
- Каждого значение ячейки в столбец должен быть представлен как процентное значение общей суммы столбца.
Например, вместо 230 в первой ячейке Column1
в таблице выше, я хочу показать 23.00%
. И он должен рассчитать следующим образом:
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()
Просто положить % перед ними! – dotctor
значения могут быть большими числами и должны быть преобразованы в проценты, я просто использовал простые, чтобы держать вопрос простым. – BanTim
Вопрос редактируется и его понятно, что ОП задает сейчас. Также он не заслуживает такого количества downvotes сейчас. –