想要避免默认的零值

时间:2012-10-05 13:56:34

标签: c# data-binding

我的应用程序中有一个类。它必将赢得文本框控件。但是绑定到BookingNo属性的文本框始终显示为零(0)。但我希望文本框保持空白。有什么办法吗?这是我的代码段。

    public class Booking 
    {
    private int pBookingNo;
    private string pCustomerName;
    private string pAddress;

    public int BookingNo
    {
        get { return pBookingNo; }
        set
        {
            if (!value.Equals(pBookingNo))
            {
                pBookingNo = value;
            }
        }
    }

    public string CustomerName
    {
        get { return pCustomerName; }
        set
        {
            if (!value.Equals(pCustomerName))
            {
                pCustomerName = value;

            }
        }
    }

    public Booking() { }
}


    public partial class Form1 : Form
    {
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        AddDataBindings();
    }

    private void AddDataBindings()
    {
        bsBooking.DataSource = typeof(Booking);

        txtBookingNo.DataBindings.Add("Text", bsBooking, "BookingNo", true, DataSourceUpdateMode.OnPropertyChanged, null, "G", GlobalVariables.CurrentCultureInfo);
        txtCustomerName.DataBindings.Add("Text", bsBooking, "CustomerName");

    }
}

4 个答案:

答案 0 :(得分:8)

Integer的默认值为0,因此您必须将其包装到其他对象中,该对象支持0以外的值,例如

public int? BookingNo { get; set; }

答案 1 :(得分:4)

您可以使用Nullable Type

public int? pBookingNo
{
  get;
  set;
}

链接:http://msdn.microsoft.com/fr-fr/library/1t3y8s4s(v=vs.80).aspx

答案 2 :(得分:2)

您可以通过向Format事件(http://msdn.microsoft.com/en-us/library/system.windows.forms.binding.format.aspx)添加处理程序来为绑定使用自定义格式,并返回值为零时为空字符串。但是您无法判断该值是否实际为零或者它是否已经设置,在这种情况下使用int? @ Grumbler85建议的方法更好。

答案 3 :(得分:0)

怎么样:

  textBox1.BindingContextChanged += new EventHandler(BindingContext_Changed);




private void BindingContext_Changed(object sender, EventArgs e)
{
   TextBox txtBox = (TextBox)sender;
   if (txtBox.Text == "0"){
      txtBox.Text = "";
   }
}

不知道它是否有效,只是一个想法。