2009-08-25 54 views
0

我在表单上有几个不同的控件(TextBoxes,DateTimePickers,MaskedTextBoxes),我想检查它们是否包含任何数据。我在我的“保存”按钮的Click事件下面的代码:检查数据的Control.Value

private void radBtnSave_Click(object sender, EventArgs e) 
    { 
     this.Cancelled = false; 
     bool bValid = true; 

     foreach(Control control in this.Controls) 
     { 
      if (control.Tag == "Required") 
      { 
       if (control.Text == "" || control.Text == null) 
       { 
        errorProvider.SetError(control, "* Required Field"); 
        bValid = false; 
       } 
       else 
       { 
        errorProvider.SetError(control, ""); 
       } 
      } 
     } 

     if (bValid == true) 
     { 
      bool bSaved = A133.SaveData(); 
      if (bSaved != true) 
      { 
       MessageBox.Show("Error saving record"); 
      } 
      else 
      { 
       MessageBox.Show("Data saved successfully!"); 
      } 
     } 
    } 

也能正常工作的文本框和MaskedEditBoxes,但是,它不会为DateTimePickers工作。对于那些,我知道我需要检查.Value属性,但我似乎无法从Control对象访问它(即“control.Value ==”“|| control.Value == null”)。

我错过了一些明显的东西吗?任何修改建议,我可以做这个代码,让我检查DateTimePicker值(或只是为了改善代码)将不胜感激。

+0

谢谢大家的帮助!我现在正确地工作。 – Sesame 2009-08-26 14:58:41

回答

3

你需要将它们转换成一个DateTimePicker:

DateTimePicker dtp = control as DateTimePicker; 
if(dtp !=null) 
{ 
    //here you can access dtp.Value; 
} 

而且,在你的代码的第一部分使用String.IsNullOrEmpty(control.Text)。

0

你需要做这样的事情:

foreach(Control control in this.Controls) 
{ 
    if (control.Tag == "Required") 
    { 
     DateTimePicker dtp = control as DateTimePicker; 
     if (dtp != null) 
     { 
      // use dtp properties. 
     } 
     else if (control.Text == "" || control.Text == null) 
     { 
      errorProvider.SetError(control, "* Required Field"); 
      bValid = false; 
     } 
     else 
     { 
      errorProvider.SetError(control, ""); 
     } 
    } 
} 
1

没有Value属性Control秒;例如,DateTimePicker创建了它自己的独特属性。

不幸的是,没有完全通用的方式来处理来自单个循环的Control对象。你可以做的最好的是沿着这条线:

if(control is DateTimePicker) 
{ 
    var picker = control as DateTimePicker; 
    // handle DateTimePicker specific validation. 
}