Как суммировать заданную c ячейку представления таблицы данных с критериями? - PullRequest
0 голосов
/ 14 января 2020

Я создал DataGridView, где я получаю данные по поисковому идентификатору клиента. Я хочу суммировать значения в TextBox, когда выбираю какой-то конкретный c CheckBox-es из DataGridView.

Но проблема в том, что он добавляет все значения во все ячейки всех строк, но должен быть таким, например; если Column число равно 2, то ожидаемое значение должно быть показано один раз в TextBox, а не после суммы, дублирующейся в ячейке received, и если номера столбцов отличаются, например, Column число 1 и Column число 2, и оба выбрано, сумма должна быть в TextBox, имя которой получено из таблицы данных 1013 * ячейка.

Я прилагаю изображение и код, а также то, что я пытаюсь сделать. может кто-нибудь подсказать как это сделать?

Screenshot

Private Sub Getvalue()

    For Each row As DataGridViewRow In DataGridView1.Rows

        If DataGridView1.RowCount > 0 Then

            Dim isSelected As Boolean = Convert.ToBoolean(row.Cells(0).Value)

            If isSelected Then

                Dim pending As String = 0
                Dim received As String = 0
                Dim final amount As String = 0

                For index As Integer = 0 To DataGridView1.RowCount - 1
                    pending += Convert.ToDouble (DataGridView1.Rows(index).Cells(15).Value)
                    received += Convert.ToDouble(DataGridView1.Rows(index).Cells(14).Value)
                    finalamount += Convert.ToDouble(DataGridView1.Rows(index).Cells(12).Value)

                Next

                Label19.Reset Text()
                Label19.Text = pending
                Label20.Reset Text()
                Label20.Text = received
                Label24.Reset Text()
                Label24.Text = final amount

                If Label19.Text <= 0 Then
                    Label18.Text = ""
                Else
                    Label18.Text = Val(Label 24.Text - Label 19.Text)

                End If
            End If
        End If
    Next
End Sub

1 Ответ

2 голосов
/ 15 января 2020

Во-первых, включите Option Strict согласно моему комментарию.

Если строк нет, ваш For Each row не будет работать, поэтому нет необходимости проверять RowCount.

Не объявляйте свои переменные накопления внутри l oop. Они будут новой переменной на каждой итерации. Ваш внутренний l oop проходит через все ряды, поэтому, конечно, вы получаете сумму всех. Устранить внутренний l oop.

Я понятия не имею, что такое Reset Text(). У метода не может быть пробела в его имени. В любом случае, если вы добавляете новое значение, очищать старое не обязательно. Если вам нужно очистить, установите "". Не обновляйте свои ярлыки до тех пор, пока после l oop. Обновлять пользовательский интерфейс на каждой итерации бесполезно. Он будет go слишком быстрым для пользователя, чтобы увидеть его, и замедляет код.

В общем, вам нужно делать сравнения арифметических c или числительных c с типами числительных c и установить .Text свойства с типом String. Метод Val должен быть заменен несколькими методами. net. .Parse, .TryParse, Convert. и в vb CInt, CDec, et c.

Private Sub Getvalue()
    Dim pending As Double = 0
    Dim received As Double = 0
    Dim finalAmount As Double = 0
    For Each row As DataGridViewRow In DataGridView1.Rows
        Dim isSelected As Boolean = CBool(row.Cells(0).Value)
        If isSelected Then
            pending += CDbl(row.Cells(15).Value)
            received += CDbl(row.Cells(14).Value)
            finalAmount += CDbl(row.Cells(12).Value)
        End If
    Next
    Label19.Text = pending.ToString
    Label20.Text = received.ToString
    Label24.Text = finalAmount.ToString
    If pending <= 0 Then
        Label18.Text = ""
    Else
        Label18.Text = (finalAmount - pending).ToString
    End If
End Sub

EDIT Обычно вы бы купили , Покупка будет иметь таблицу в базе данных с полями, такими как номер покупки, дата, клиент и т. Д. c. У вас будет другая таблица с деталями покупки. Таблица подробностей будет иметь такие поля, как номер детали (первичный ключ), номер покупки внешнего ключа, который должен совпадать с записью в таблице покупок, идентификатор товара и цена. Когда клиент хочет вернуть товар или предметы из покупки. Вы должны ввести номер покупки и заполнить свою сетку из таблицы сведений о покупке.

Select * From PurchaseDetails Where purchaseNumber = @purchaseNumber

Поставьте галочку напротив каждого возвращенного товара и суммируйте столбец цены.

Покупка Таблица

PurchaseID | CustomerID | Дата

Таблица сведений о покупке

DetailID | PurchaseID | ItemCode | ItemPrice

...