Проверьте Control.Value для данных
У меня есть несколько различных элементов управления (TextBoxes, DateTimePickers, MaskedTextBoxes) в форме, которую я хотел бы проверить, чтобы увидеть, содержат ли они какие-либо данные. У меня есть следующий код в событии Click моей кнопки "Сохранить":
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!");
}
}
}
Это отлично работает для TextBoxes и MaskedEditBoxes, однако не работает для DateTimePickers. Для них я знаю, что мне нужно проверить свойство.Value, но я не могу получить к нему доступ из объекта Control (то есть "control.Value == "" || control.Value == null").
Я что-то упускаю из виду? Будем весьма благодарны за любые предложения о внесении изменений в этот код, которые позволят мне проверить значения DateTimePicker (или просто улучшить код).
3 ответа
Вам необходимо привести их к DateTimePicker:
DateTimePicker dtp = control as DateTimePicker;
if(dtp !=null)
{
//here you can access dtp.Value;
}
Также, используйте String.IsNullOrEmpty(control.Text) в первой части вашего кода.
Здесь нет Value
собственность для Control
s; DateTimePicker
Например, создает свое собственное свойство, уникальное для него.
К сожалению для вас, не существует полностью универсального способа справиться с этим из одного цикла Control
объекты. Лучшее, что вы можете сделать, это что-то вроде этого:
if(control is DateTimePicker)
{
var picker = control as DateTimePicker;
// handle DateTimePicker specific validation.
}
Вам нужно будет сделать что-то вроде этого:
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, "");
}
}
}