2016-09-27 58 views
0

我的项目包含一个允许输入订单的表单,使用UltraGrid保存初始数据后无法将UltraGrid复选框值设置为True

一列是checkbox样式列,表示订单是否已交货。

当订单达到“阶段4 - 等待发货”时,用户可以将列值设置为True,然后再提示新窗口,以允许用户输入交货量和价值。 如果订单尚未完全交付,checkbox设置为False,订单行变为黄色(例如,已订购了5个门,但仅交付了3个= False,但为黄色订单行)。

保存订单后关闭并重新登录,我试图设置CheckboxTrue,更新订单以添加剩余交付(最终2个交货门已交付),但只要我将它设置为True,它立即再次变为False(当单步执行CellChange方法中的以下代码时,它也表示单元格值也是False)。

那么,为什么我只能改变一次值呢?保存后,为什么该值不能再被更改?它是否在数据库中保存为False这一事实?

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 

回答

0

其中的错误是与e.Row.Update()

我在提交单元格的值,然后你设置单元格的值,这导致CellChange以递归方式再次触发,之后我不确定会发生什么,但有更有效的方法编写这段代码。

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 
相关问题