Проверьте Control.Value для данных - PullRequest
0 голосов
/ 26 августа 2009

У меня есть несколько различных элементов управления (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 ]

3 голосов
/ 26 августа 2009

Вам необходимо привести их к DateTimePicker:

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

Кроме того, используйте String.IsNullOrEmpty (control.Text) в первой части вашего кода.

1 голос
/ 26 августа 2009

Нет свойства Value для Control с; DateTimePicker, например, создает свое собственное свойство, уникальное для него.

К сожалению, для вас не существует полностью универсального способа обработки этого из одного цикла Control объектов. Лучшее, что вы можете сделать, это что-то вроде этого:

if(control is DateTimePicker)
{
   var picker = control as DateTimePicker;
   // handle DateTimePicker specific validation. 
}
0 голосов
/ 26 августа 2009

Вам нужно будет сделать что-то вроде этого:

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, "");
        }
    }
}
...