Ngqulunga Ответов: 2

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


Я пытаюсь уменьшить запас в базе данных магазина, используя отображаемые данные в моих gridviews.
- (grdSaleSet) этот gridview отображает мои продажи как квитанцию о продаже
- (grdStockDecrement) - это gridview отображает рецепт (идентификатор элемента и пропорцию элемента), которые получают параметры из GridView saleset.

Проблема начинается, когда мне нужно выполнить цикл в этом вложенном цикле, он проходит только одну итерацию рецепта элемента, поставляемого saleset item,но не читает второй элемент из Saleset gridview, чтобы он мог искать второй рецепт элемента и уменьшать его.
Цикл только уменьшает запас для 1-го товара в продаже, используя его рецепт. Второй пункт вроде бы не пройден.
Пожалуйста, сообщите, что я, возможно, пропустил в приведенном ниже коде?

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

'search controller to decrement stock driver grid
For ss As Integer = 0 To grdSaleSet.Rows.Count - 1

    objCM.MenuDescription = grdSaleSet.Rows(ss).Cells(1).Value 'extract item description
    objCM.Price = Convert.ToDecimal(grdSaleSet.Rows(ss).Cells(2).Value) 'extract item price
    grdStockDecrement.DataSource = objc.GetIngredientsDecrementDriver(objCM.MenuDescription, objCM.Price) 'search using item desc and price and display on decrement gridview
    grdStockDecrement.Columns(0).Visible = False 'Hiding the column which is not reqiured.

    'Proportion to decrease stock
    For dd As Integer = 0 To grdStockDecrement.Rows.Count - 1 'loop using decreament gridview
        objc._ingrId = grdStockDecrement.Rows(dd).Cells(1).Value 'extract ingredient id
        objc.Proportion = Convert.ToDecimal(grdStockDecrement.Rows(dd).Cells(2).Value) 'extract ingredient recipe proportion
        objc.decrement_Inventory(objc._ingrId, objc.Proportion)
    Next

Next

Ngqulunga

Спасибо, Рик,я посмотрю.

2 Ответов

Рейтинг:
1

RickZeeland

Я думаю, что ваша проблема вызвана сбросом grdStockDecrement.DataSource постоянно во внешней петле.
Для фильтрации DataSet, видеть: Фильтрация и сортировка в наборах данных[^]
Если вы используете DataTable вы могли бы использовать dataTable.DefaultView.RowFilter.


Ngqulunga

@RickZeeland, я эксполировал ваше решение, но причина сброса gridview во внешнем цикле: grdsaleset управляет внутренним циклом, возвращая рецепт каждого элемента в grdstockDecreament. Внутренние петли это петли в grdstockDecreament вернулся рецепт для снижения запасов.

RickZeeland

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

Ngqulunga

Спасибо Рикзиленду за вашу попытку, мне удалось найти решение моей проблемы. См. ниже Решение.

Рейтинг:
1

Ngqulunga

Here is how i fixed it.
            'The CASH payment only
            If radCash.Checked = True Then
                If txtTenderAmount.Text = "" Then
                    MessageBox.Show("Please enter cash amount")
                Else
                    'saving into order table
                    objCust.CustomerId = Convert.ToInt32(1)
                    objCust.EmployeeId = 3
                    objCust.OrderTotal = Convert.ToDecimal(txtSaleTotal.Text)
                    objCust.OrderTender = Convert.ToDecimal(txtTenderAmount.Text)
                    objCust.PaymentMethod = "Cash"
                    objCust.PaymentStatus = "Paid"
                    objCust.OrderStatus = "Open"
                    objCust.OrderDate = CDate(System.DateTime.Now)
                    objCust.CreateNewCustomerOrder(objCust)

                    'Save order info into bridge entity OrderItem table
                    For x As Integer = 0 To grdSaleSet.Rows.Count - 1

                        itemQty = CInt(grdSaleSet.Rows(x).Cells(0).Value) 'extract item qty in sale set
                        If itemQty = 0 Then
                            lbl1.Text = itemQty
                            objCustOrd.ItemQty = 1
                        Else
                            objCustOrd.ItemQty = itemQty 'extract item qty in sale set
                        End If
                        'objCustOrd.ItemQty = grdSaleSet.Rows(x).Cells(0).Value 'extract item qty in sale set
                        objCustOrd.ItemNo = CInt(grdSaleSet.Rows(x).Cells(1).Value) 'extract item No
                        objCustOrd.ItemPrice = grdSaleSet.Rows(x).Cells(3).Value 'extract item price
                        objCustOrd.CreateNewCustomerOrderItem() 'calling save function into order item
                    Next

                    'Controller driver  gridview to decrement stock
                    For ss As Integer = 0 To grdSaleSet.Rows.Count - 2  'This gridview -2 because of the default header which and last row in the grid which is empty.
                        itemQty = CInt(grdSaleSet.Rows(ss).Cells(0).Value) 'Quantity per line item in a sale-set
                        objCM.MenuDescription = grdSaleSet.Rows(ss).Cells(2).Value 'extract item description
                        objCM.Price = Convert.ToDecimal(grdSaleSet.Rows(ss).Cells(3).Value) 'extract item price

                        'Checking the line item qty, if its zero set it one  
                        If itemQty = 0 Then
                            itemQty = 1  'set line item qty to a default value of one
                        End If

                        grdStockDecrement.DataSource = objc.GetIngredientsDecrementDriver(objCM.MenuDescription, objCM.Price) 'search using item desc and price and display on decrement gridview
                        grdStockDecrement.Columns(0).Visible = False 'Hiding the column which is not reqiured.
                        'Proportion to decrease stock
                        For dd As Integer = 0 To grdStockDecrement.Rows.Count - 1 'loop using decreament gridview
                            objc._ingrId = grdStockDecrement.Rows(dd).Cells(1).Value 'extract ingredient id
                            objc.Proportion = Convert.ToDecimal(grdStockDecrement.Rows(dd).Cells(2).Value) * itemQty  'extract ingredient recipe proportion
                            objc.decrement_Inventory(objc._ingrId, objc.Proportion)
                        Next
                    Next
                    MessageBox.Show("Order succesfully saved") 'Show succes completion of order
                End If
            End If