Bool变量值变化,但我无法弄清楚为什么

时间:2013-12-06 15:12:45

标签: c# datagridview

当填充我的应用程序中的DataGridView时,将触发以下方法:

        public void OrderSelectionChanged()
    {
        ConfirmOrCancelChangesDialog();

        // Get values from selected order and populate controls
        if (view.OrderTable.SelectedRows.Count != 0)
        {
            OrderViewObject ovm = (OrderViewObject)view.OrderTable.SelectedRows[0].DataBoundItem;
            selectedOrder = orderModel.GetOrderById(ovm.OrderId);

            // Populate view controls with data from selected order
            view.OrderID = selectedOrder.Id.ToString();
     ---->> view.OrderDateCreated = selectedOrder.DateCreated; <<-----
            view.OrderDeliveryDate = selectedOrder.DeliveryDate;

            PopulateOrderAddressControls(selectedOrder.Address);

            PopulateOrderItemTableControl();
            PopulateOrderWeightAndSumControls();

            view.OrderNote = selectedOrder.Note;

            // Enable buttons
            view.DeleteOrderButtonEnabled = true;
            view.NewOrderItemButtonEnabled = true;
        }
        else
        {
            view.DeleteOrderButtonEnabled = false;
        }
    }

出于某种原因,“isSaved”变量在我用箭头标记的行上从true变为false,我无法弄清楚原因。这不应该发生,以前从来不是问题,而是突然出现。

正在使用以下方法检查变量“isSaved”:

        public void ConfirmOrCancelChangesDialog()
    {
        if (!isSaved)
        {
            DialogResult dialog = MessageBox.Show(Properties.Resources.SaveChanges,
                Properties.Resources.SaveChangesTitle, MessageBoxButtons.YesNo);

            if (dialog == DialogResult.Yes)
            {
                SaveOrder();
            }
            else
            {
                UndoChanges();
            }
        }
    }

这导致每次启动应用程序时都会出现保存或取消对话框,这显然是错误的。由于选择更改方法被触发三次并且在第一次运行期间更改了isSaved,因此在第二次执行期间会弹出对话框。通过逐步调试,我可以弄清楚isSaved在什么时候正在改变,但不知道如何或为什么。

View是表单,OrderDateCreated是DateTimePicker的getter / setter,selectedOrder只是一个订单对象而DateCreated是Date。我在这里错过了什么吗?

干杯!

1 个答案:

答案 0 :(得分:0)

它似乎与view对象的代码设置值有关。 如果您没有自己创建属性,则该对象可能具有set属性,可检测到任何更改并将isSaved属性设置为false。

尝试此解决方法:

bool wasSaved = isSaved; //reference properly to your isSaved variable, and store it in the wasSaved local var

view.OrderID = selectedOrder.Id.ToString();
view.OrderDateCreated = selectedOrder.DateCreated;
view.OrderDeliveryDate = selectedOrder.DeliveryDate;

isSaved = wasSaved; //revert to the previous state