Как передать пустое значение текстового поля как ноль в привязанную дату и время - PullRequest
2 голосов
/ 23 марта 2012

По тегам, это Entity Framework, C #, вопрос Winforms.

У меня есть данные текстового поля, привязанные к обнуляемому полю даты и времени в моей сущности. Я хочу передать нулевое значение объекту, когда удаляю содержимое текстового поля и оставляю его пустым.

Textbox CausesValidation свойство = true. Когда я удаляю содержимое текстового поля, я не могу оставить его без ввода правильной даты.

Вот мое Валидирующее событие

private void txtDueDateDetail_Validating(object sender, CancelEventArgs e)
{
    string errorMsg;
    if (!ValidDate(txtDueDateDetail.Text, out errorMsg))
    {
        // Cancel the event and select the text to be corrected by the user.
        e.Cancel = true;
        txtDueDateDetail.Select(0, txtDueDateDetail.Text.Length);

        // Set the ErrorProvider error with the text to display. 
        this.epNew.SetError(txtDueDateDetail, errorMsg);
    }

    Debug.Write("text: " + txtDueDateDetail.Text);
}

public bool ValidDate(string pTextDate, out string errorMessage)
{
    DateTime tempDate;
    errorMessage = "";

    if (pTextDate.Length == 0)
    {
        //pass a null date...how?
        return true;
    }

    DateTime.TryParse(pTextDate, out tempDate);
    if (tempDate == DateTime.MinValue)
    {
        errorMessage = "date must be in format MM/dd/yyyy";
        return false;
    }

    return true;
}

Любые идеи будут полезны.

Ответы [ 2 ]

3 голосов
/ 26 апреля 2012

Учитывая ваш первоначальный подход, вы пытались установить Binding.NullValue в пустую строку? Вы можете сделать это программно следующим образом:

txtDueDateDetail.DataBindings["Text"].NullValue = "";

В соответствии с документами назначение пустой строки для NullValue отличается от назначения null (что является ее значением по умолчанию).

Ваше окончательное решение в порядке. Я подумал о его реализации, прежде чем прочесть о свойстве NullValue. Для меня его недостаток в том, что он уменьшает полезность привязки данных, потому что таким образом я в итоге вручную присваиваю измененное значение обратно источнику данных - и я ожидал, что привязка данных сделает это за меня.

1 голос
/ 10 апреля 2012

Мне не удалось обойти нулевую проверку даты и времени, поэтому я отключил проверку в поле [CausesValidation = FALSE] и выполнил свою собственную проверку в событии Leave.

 public bool ValidDate(string pTextDate, out DateTime? pDate, out string errorMessage)
    {
        DateTime tempDate;
        errorMessage = "";
        pDate = null;
        if (pTextDate.Length == 0)
        {
            //pass null date here...
            return true;
        }
        DateTime.TryParse(pTextDate, out tempDate);

        if (tempDate == DateTime.MinValue)
        {
            errorMessage = "date must be in format MM/dd/yyyy";
            return false;
        }
        pDate = tempDate;
        return true;
    }

    private void txtDueDateDetail_Leave(object sender, EventArgs e)
    {
        string errorMsg;
        DateTime? outDate;
        if (!ValidDate(txtDueDateDetail.Text, out outDate, out errorMsg))
        {
            txtDueDateDetail.Select(0, txtDueDateDetail.Text.Length);
        }
        else
        {
            int CID = Convert.ToInt32(txtChargebackIDDetail.Text);
            var temp = (from c in chg.ChargeBackks
                        where c.ID == CID
                        select c).FirstOrDefault();
            temp.DueDate = outDate;
        }
        this.epNew.SetError(txtDueDateDetail, errorMsg);

    }

Функционально...но не лучшее решение ИМО.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...