将可空的DateTime绑定到MaskedTextBox

时间:2009-06-11 16:47:47

标签: c# data-binding datetime nullable maskedtextbox

我有一个绑定到nullabe日期时间的屏蔽文本框,但是当日期消隐时,屏蔽文本框上的验证将无法完成。有没有办法强迫这种行为?我想要一个空白的文本框等于null DateTime。

当文本框已为空时,验证有效。它只会在已经绑定日期时中断,我会尝试将其删除。

5 个答案:

答案 0 :(得分:4)

我发现它与验证没有关系。当日期被解析回日期时间时。

这可能不是最优雅的方式,但确实有效。如果有人知道更好的方法,请告诉我。

我现在有了这个代码。

public static void FormatDate(MaskedTextBox c) {
    c.DataBindings[0].Format += new ConvertEventHandler(Date_Format);
    c.DataBindings[0].Parse += new ConvertEventHandler(Date_Parse);
}

private static void Date_Format(object sender, ConvertEventArgs e) {
    if (e.Value == null)
        e.Value = "";
    else
        e.Value = ((DateTime)e.Value).ToString("MM/dd/yyyy");
}

static void Date_Parse(object sender, ConvertEventArgs e) {
    if (e.Value.ToString() == "  /  /")
        e.Value = null;
}

答案 1 :(得分:1)

我将maskedtextbox用于datetime类型

this.txtDateBrth.DataBindings.Add("Text", bsAgent, "DateBrth", true, DataSourceUpdateMode.OnPropertyChanged, null, "dd/MM/yyyy");

如果需要null日期值,请在类声明中使用可为空的datetime类型:

private DateTime? _DateBrth;
        public DateTime? DateBrth
        {
            get { return _DateBrth; }
            set { _DateBrth = value; }
        }

答案 2 :(得分:0)

这应该有效:

private void Form1_Load(object sender, EventArgs e)
{
    maskedTextBox1.Mask = "00/00/0000";
    maskedTextBox1.ValidatingType = typeof(System.DateTime);
    maskedTextBox1.TypeValidationCompleted += new TypeValidationEventHandler
       (maskedTextBox1_TypeValidationCompleted);
}



private void TypeValidationCompletedHandler(object sender, TypeValidationEventArgs e )
{
    e.Cancel = !e.IsValidInput &&
        this.maskedTextBox1.MaskedTextProvider.AssignedEditPositionCount == 0;

}

答案 3 :(得分:0)

试验这个我终于找到了一个更简单的解决方案。

第1步:

在Form.Designer.cs中搜索绑定了maskedtextbox(我的名为“mTFecha”)的行。即:

 // mTFecha
 // 
 this.mTFecha.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.listaAnimalesOfertadosBindingSource, "F_peso", true);

第2步:

申请一个小黑客:

this.mTFecha.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.listaAnimalesOfertadosBindingSource, "F_peso", true, System.Windows.Forms.DataSourceUpdateMode.OnValidation, "  /  /"));

你做完了!

答案 4 :(得分:0)

您可以简单地给出如下日期格式:

maskTextBox1.DataBindings.Add("Text", bs, "SummitDate1", true, DataSourceUpdateMode.OnPropertyChanged, null, "dd/MM/yyyy");