Сортировать и суммировать столбец gridview в vb.net - PullRequest
0 голосов
/ 25 апреля 2020

Я просто хочу попросить помощи, может кто-то здесь может мне помочь. Я собираюсь go прямо к моему запросу.

Итак, у меня есть сетка, которая отображает column1 и column2.

В столбце 1 содержатся случайные числа, такие как 1-100 в каждой строке. ,

также в столбце 2, который содержит только 1 и 0 (как истина или ложь).

Это выглядит в виде сетки,

column1 | column2 |

15       |   1      |       

19       |   1      |       

26       |   0      |       

75       |   1      |       

и т. Д. И т. Д. , Я хочу получить общее значение столбца 2 со значением от 15 до 19 в столбце 1 (в скобках) и отобразить общее значение в текстовом поле 1.

В этом примере (15-19, в скобках) столбца 1 имеет общее значение 2 в столбце 2. Пример используемой скобки выглядит следующим образом (15-19, 20-24, 25-29 и т. Д.).

    Dim rows() As DataRow = datatable.Select("column1 = '15'")
    Dim total As Double = 0
    For i As Integer = 0 To GridView1.RowCount - 1
        total += GridView1.GetRowCellValue(i, "column2")
    Next
    TextEdit1.Text = total

Приведенный выше код добавляет все значения колонка 2.

Заранее спасибо!

Ответы [ 3 ]

0 голосов
/ 25 апреля 2020

Метод DataTable.Compute может выполнять фильтрацию и применять агрегатную функцию, например суммирование столбца.

Предполагая, что и column1, и column2 содержат целочисленные значения (ваш код использует Двойной тип для суммирования столбца 2, данные представляются целочисленным типом), ваш код может быть сокращен до одного оператора для заданного диапазона столбца 1.

TextEdit1.Text = datatable.Compute("Sum(column2)", "column1 >= 15 AND column1 <= 19").ToString()
0 голосов
/ 25 апреля 2020

Альтернативный подход с дополнительной справкой по проверке типов.

Dim total As Integer= datatable.AsEnumerable().
    Where(Function(row) row.Field<Integer>("column1") >= 15).
    Where(Function(row) row.Field<Integer>("column1") <= 19).
    Select(Function(row) row.Field<Integer>("column2")).
    Sum()

TextEdit1.Text = total.ToString()
0 голосов
/ 25 апреля 2020

Вы почти там - ваш запрос datatable.Select("column1 = '15'") будет возвращать только те строки, в которых значение точно равно "15" (либо только строковые значения, либо неявное преобразование в числа, я забыл, что это древний и устаревший API, кстати) - но ваш код вообще не использует переменную rows.

Я думаю, что это будет работать:

См. эту страницу для справки по синтаксису DataTable.Select(String), как его собственная вещь, которая отделена от VB.NET/C# или даже SQL.

    Dim rows() As DataRow = datatable.Select("column1 >= 15 AND colum1 <= 19")

    Dim total As Double = 0

    For Each row As DataRow in rows
        total += CDbl( row("colum2") )
    Next

    TextEdit1.Text = total.ToString("N0")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...