Alvin S
Alvin S

Reputation: 1189

Winforms .Net Simple Databinding Not Working

I have a Winform with a very basic premise: modify 2 string properties of an object that is passed into it, then save it to disk when the form closes. I am trying to use databinding to bind the Text properties of 2 textboxes on the form to the 2 string properties of the object.

But it isn't working. The textboxes never display the values I am assigning to the object properties in the constructor. And when I type something into the textboxes, the object properties are not getting updated. What am I doing wrong?

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Xml;
using System.Xml.Serialization;
namespace Eds_Viewer
{
    public partial class EdsConfigForm : Form
    {
        public EdsConfigForm(EdsConfig myconfig)
        {
            InitializeComponent();
            EdsConfig = myconfig;
            if (EdsConfig.VFPConnectionString == null) //set a default value
            {
                EdsConfig.VFPConnectionString = "Provider=vfpoledb;Data Source=g:\\eds\\";
            }
            if (EdsConfig.VFPFileName == null) //set a default value
            {
                EdsConfig.VFPFileName = "InvoiceDB";
            }
            this.VFPConnectionStringTextbox.DataBindings.Add("Text", EdsConfig, "VFPConnectionString");
            this.VFPFileNameTextbox.DataBindings.Add("Text", EdsConfig, "VFPFileName");
        }
        EdsConfig EdsConfig;
        private void SaveConfigToDisk(EdsConfig myconfig)
        {
            XmlSerializer x = new XmlSerializer(typeof(EdsConfig));
            TextWriter tw = new StreamWriter("EdsConfig.xml");
            x.Serialize(tw, myconfig);
            tw.Close();
        }
        private void EdsConfigForm_FormClosing(object sender, FormClosingEventArgs e)
        {
            this.SaveConfigToDisk(this.EdsConfig);
        }
    }
}

Upvotes: 2

Views: 4366

Answers (2)

dance2die
dance2die

Reputation: 36895

Set the DataSource argument in "DataBindings.Add(..)" to "bs"(of type BindingSource)

    BindingSource bs = new BindingSource(EdsConfig, "VFPConnectionString");
    this.VFPConnectionStringTextbox.DataBindings.Add("Text", bs, "VFPConnectionString");
    this.VFPFileNameTextbox.DataBindings.Add("Text", bs, "VFPFileName");

Upvotes: 0

Enrico Campidoglio
Enrico Campidoglio

Reputation: 59885

Does the EdsConfig class implement the INotifyPropertyChanged interface?
This is a requirement for objects that are used as databinding sources, since the PropertyChanged event raised from the properties' setters is used to update the bindings whenever the property is modified.

Upvotes: 4

Related Questions