更新按钮导致数据丢失!

时间:2011-05-16 00:34:47

标签: c# winforms tryparse

以下代码在看似随机的时间提示消息为tryparse,然后使用空值或空值更新我的数据。将数据输入到totaltaxtextbox和totalwatertextbox中可能会发生这种情况。

    private void button2_Click(object sender, EventArgs e)
    {

            string parcel = parcelNumberTextBox.Text;
            string premises = premisesTextBox.Text;
            string beg = assessedBegTextBox.Text;
            string dim = assessedDimTextBox.Text;
            string legal = legalTextBox.Text;
            string notes = sumNotesTextBox.Text;
            string taxf = taxFromTextBox.Text;
            string taxt = taxToTextBox.Text;
            string waterf = waterFromTextBox.Text;
            string watert = waterToTextBox.Text;
            string recital = recitalTextBox.Text;
            string taxLien = totalTaxTextBox.Text;
            string waterLien = totalWaterTextBox.Text;
            string taxName = taxAcctNameTextBox.Text;
            string registry = registryTextBox.Text;

            decimal taxOpen;
            if (!decimal.TryParse(taxOpenTextBox.Text, NumberStyles.Number | NumberStyles.AllowCurrencySymbol,
                     NumberFormatInfo.CurrentInfo, out taxOpen))
                MessageBox.Show("Please enter a valid number in the Tax Open Text Box");

            decimal waterOpen;

            if (!decimal.TryParse(waterOpenTextBox.Text, NumberStyles.Number | NumberStyles.AllowCurrencySymbol,
                     NumberFormatInfo.CurrentInfo, out waterOpen))
                MessageBox.Show("Please enter a valid number in the Water Open Text Box");


            DataClasses1DataContext db = new DataClasses1DataContext();

            var matchedCaseNumber = (from c in db.GetTable<PropertyInformation>()
                                     where c.CaseNumberKey == caseNumberKeyTextBox.Text
                                     select c).SingleOrDefault();


            matchedCaseNumber.AssessedBeg = beg;
            matchedCaseNumber.AssessedDim = dim;
            matchedCaseNumber.Premises = premises;
            matchedCaseNumber.Legal = legal;
            matchedCaseNumber.SumNotes = notes;
            matchedCaseNumber.ParcelNumber = parcel;
            matchedCaseNumber.TaxFrom = taxf;
            matchedCaseNumber.TaxTo = taxt;
            matchedCaseNumber.WaterFrom = waterf;
            matchedCaseNumber.WaterTo = watert;
            matchedCaseNumber.TaxOpen = taxOpen;
            matchedCaseNumber.WaterOpen = waterOpen;
            matchedCaseNumber.Recital = recital;
            matchedCaseNumber.TotalTax = taxLien;
            matchedCaseNumber.TotalWater = waterLien;
            matchedCaseNumber.Registry = registry;
            matchedCaseNumber.TaxAcctName = taxName;
            matchedCaseNumber.TaxOpen = taxOpen;
            matchedCaseNumber.WaterOpen = waterOpen;

            db.SubmitChanges();
            Dirty = false;

    }

如何解决这个问题的任何帮助都会很棒。

谢谢!

1 个答案:

答案 0 :(得分:4)

这是因为您的代码在显示MessageBox后继续执行

if (!decimal.TryParse(taxOpenTextBox.Text, NumberStyles.Number | NumberStyles.AllowCurrencySymbol,
                 NumberFormatInfo.CurrentInfo, out taxOpen))
{
     MessageBox.Show("Please enter a valid number in the Tax Open Text Box");
     return;   // <--------------
}
BTW,一种更好的方法是使用errorProviderINotifyPropertyChangedvalidation