0

My project contains a form which allows the entering of orders, using an UltraGrid.

One column is a checkbox style column, to represent whether or not the order has been delivered.

When the order reaches 'Stage 4 - Awaiting Goods Delivery', the user can set the column value to True, which in turn prompts a new window, to allow the user to enter the volume and value of the delivery. If the order hasn't been fully delivered, the checkbox is set back to False, and the order line turns yellow (Eg; 5 gates have been ordered, but only 3 delivered = False, but a yellow order line).

After saving the order, closing it and going back into it, I'm trying to set the Checkbox to True, to update the order to add on the rest of the delivery (the final 2 gates have been delivered), but as soon as I set it to True, it instantly becomes False again (When stepping through the following code in the CellChange method, it says the cell value is False too).

So, why can I only change the value once? After it's been saved, why can the value then not be changed again? Is it do with the fact that it's saved as False in the database?

Try
  If e.Cell.Column.ToString = "Goods_Delivered" Then
     e.Cell.Row.Update()

       If e.Cell.Value = True Then
           If IsDBNull(e.Cell.Row.Cells("Final_Delivery").Value) Then
              MsgBox("Please enter a delivery date", MsgBoxStyle.OkOnly, "Invalid Date")
                    e.Cell.Row.Cells("Goods_Delivered").Value = False
           Else
            Dim f As New dlgDelivery(e.Cell.Row, Me, e.Cell.Row.Cells("Final_Delivery").Value, con, orderNumber, e.Cell.Row.Cells("Product_Code").Value, exTotal)
                f.ShowDialog()
           End If

           e.Cell.Row.Update()

        cmdCheck_Click(sender, New EventArgs)
        cmdTotals_Click(sender, New EventArgs)

  ElseIf e.Cell.Value = False Then
      ugProducts.ActiveRow.Cells("Final_Delivery").Value = DBNull.Value
       productCode = ugProducts.ActiveRow.Cells("Product_Code").Value
       database.NotDelivered(orderNumber, productCode, con)
     Exit Sub
  Else
  End If
David
  • 2,298
  • 6
  • 22
  • 56

1 Answers1

2

The error within this was with e.Row.Update().

I was committing the value of the cell and then you are SETTING the value of the cell, which was causing CellChange to fire again recursively, and after that I'm not sure what happens, but there was more effective ways of writing this code.

Try
  If e.Cell.Column.Key = "Goods_Delivered" Then
   Dim goodsDelivered As Boolean = Boolean.Parse(e.Cell.Text)
     If goodsDelivered = True Then
      If IsDBNull(e.Cell.Row.Cells("Final_Delivery").Value) Then
       MsgBox("Please enter a delivery date", MsgBoxStyle.OkOnly, "Invalid Date")
       Dim checkEditor As CheckEditor = e.Cell.EditorResolved
       checkEditor.Value = False
      Else
       Dim f As New dlgDelivery(e.Cell.Row, Me, e.Cell.Row.Cells("Final_Delivery").Value, con, orderNumber, e.Cell.Row.Cells("Product_Code").Value, exTotal)
       f.ShowDialog()
      End If
     ElseIf goodsDelivered = False Then
       ugProducts.ActiveRow.Cells("Final_Delivery").Value = DBNull.Value
                productCode = ugProducts.ActiveRow.Cells("Product_Code").Value
                database.NotDelivered(orderNumber, productCode, con)
             Exit Sub
         End If
      End If

Catch ex As Exception
   errorLog(ex)

 End Try
David
  • 2,298
  • 6
  • 22
  • 56