Member7596 Ответов: 2

Измените этот код, чтобы сделать это всякий раз, когда вы нажимаете эту кнопку, чтобы добавить +1 Кол-во в datagridview


Private Sub OK1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAdd.Click
 
    Dim sqlQRY As String = "SELECT * FROM Products WHERE ProductCode = '" & txtCode.Text & "'"
    Dim cmd As OleDbCommand = New OleDbCommand(sqlQRY, conn)
    Dim rdr As OleDbDataReader = cmd.ExecuteReader
 
    If txtCode.Text = "" Then
        MessageBox.Show("Input a product code!", "Warning!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        txtCode.Text = ""
        txtCode.Focus()
    ElseIf rdr.HasRows Then
        rdr.Read()
 
        Dim intProductID As Integer = rdr("ProductID").ToString
 
        Dim newRow As SalesDataSet.SalesDetailsRow = SalesDataSet.SalesDetails.NewSalesDetailsRow
 
        newRow.SalesID = SalesIDTextBox.Text
        newRow.ProductName = intProductID
        newRow.Qty = 1
        Dim Price As Decimal = rdr("Price")
        newRow.Price = Price
        newRow.Amount = Price
 
        SalesDataSet.SalesDetails.Rows.Add(newRow)
 
        txtCode.Text = ""
        txtCode.Focus()
    Else
        MessageBox.Show("Product not found!", "Warning!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        txtCode.Text = ""
        txtCode.Focus()
    End If
 
    txtTotal.Text = Totals()
 
    Dim vat As Decimal
 
    vat = Val(txtTotal.Text) * 0.12
 
    txtVAT.Text = vat
    Button1.Enabled = True
 
End Sub


Что я уже пробовал:

Я попытался изменить "newRow. Qty = 1" на "newRow.Qty += 1", но не получилось !
Пожалуйста, помогите мне с этим кодом. Спасибо! :)

Richard MacCutchan

Вы должны получить начальное количество из вашей записи базы данных, а затем добавить к нему 1. Что-то вроде
newRow.Qty = rdr("Quantity").Value + 1;

Member7596

Когда я ok1.performclick() за два раза потом показывают двух строк в элементе управления datagridview.
Я хочу показать одну строку в datagridview, когда я нажимаю ok1. performclick() в течение двух раз, но кол-во в один раз равно 1, а в два раза-2. Спасибо

Richard MacCutchan

Затем вам нужно изменить логику программы в вашем методе нажатия кнопки. В таком виде Вы читаете запись и создаете новую строку данных. Вам нужно изменить его так, чтобы он сначала проверял существующую строку с этим идентификатором продукта.

2 Ответов

Рейтинг:
6

khaled Ezzat Abdelfattah Abdelgawad

Dim r() As DataRow = SalesDataSet.SalesDetailsRow.Select("SalesID = " & rdr("SalesID"))

Предыдущий код получает строки в наборе данных, которые имеют "SalesID" (первичный ключ) = SalesID, полученный читателем (rdr("salesID")). А так как это первичный ключ, то r() получит только одну строку. Таким образом, r(0) - это единственная строка в коллекции r (), поскольку это нулевой индекс. Наконец, следующим образом вы можете обновить каждое поле в этой строке (r (0)).


r(0)("ProductName") = "exist22"
r(0)("Qty") += 1
r(0)("Price") = 10
r(0)("Amount") = 10


Если у вас все еще есть проблемы, пожалуйста, вставьте свой код сюда еще раз и сформулируйте проблему.


Member7596

БОЛЬШОЕ СПАСИБО!! :) :) :Д

Если у вас есть возможность продемонстрировать в проекте и прислать мне ссылку (для скачивания) в комментарии, это было бы хорошо!
В любом случае, большое спасибо. :Д
Vb.net

Рейтинг:
14

khaled Ezzat Abdelfattah Abdelgawad

ваш код должен обновить recor, если reader имеет значения, а else вставляет новую запись, поэтому ваш код внутри вашего btnAdd должен быть точно таким:

Dim sqlQRY As String = "SELECT * FROM Products WHERE ProductCode = '" & txtCode.Text & "'"
        Dim cmd As OleDbCommand = New OleDbCommand(sqlQRY, conn)
        Dim rdr As OleDbDataReader = cmd.ExecuteReader

        If rdr.HasRows Then
            rdr.Read()
            Dim r() As DataRow = SalesDataSet.SalesDetailsRow.Select("SalesID = " & rdr("SalesID"))
            r(0)("ProductName") = "exist22"
            r(0)("Qty") += 1
            r(0)("Price") = 10
            r(0)("Amount") = 10

        Else
            Dim newRow As SalesDataSet.SalesDetailsRow = SalesDataSet.SalesDetails.NewSalesDetailsRow
            newRow.SalesID = SalesIDTextBox.Text
            newRow.ProductName = intProductID
            newRow.Qty = 1
            newRow.Price = Price
            newRow.Amount = Price
            SalesDataSet.SalesDetails.Rows.Add(newRow)
            txtCode.Text = ""
            txtCode.Focus()
        End If
        SalesTableAdapter.Update(SalesDataSet)
        SalesDataSet.Worker.AcceptChanges()


Richard MacCutchan

Вы должны принять к сведению комментарии Ричарда Диминга выше.

Member7596

БОЛЬШОЕ ВАМ СПАСИБО, ХАЛЕД ЭЗЗАРТ!!: D

Этот ответ может быть правильным но я не понимаю что это такое:
Для r(0)("Название") = "exist22": индекс находился вне границ массива.
r(0) ("Qty") + = 1: индекс находился за пределами массива.
r (0) ("Цена") = 10: индекс находился за пределами массива.
r(0) ("сумма") = 10: индекс находился за пределами массива.

Пожалуйста, не могли бы вы мне помочь?

Member7596

БОЛЬШОЕ СПАСИБО!! :) :) :Д

Если у вас есть возможность продемонстрировать в проекте и прислать мне ссылку (для скачивания) в комментарии, это было бы хорошо!
В любом случае, большое спасибо. :Д
Vb.net