当我更改2个绑定的TextBox之一时,相同的DataBinding不会更新

时间:2013-02-22 13:59:42

标签: c# winforms data-binding textbox

我有两个使用相同BindingSource的TextBox。当我更新一个TextBox并失去焦点时,另一个TextBox不会将其属性更新为新值。

非常感谢任何帮助。

    using System.Data;
    using System.Windows.Forms;
    using System.ComponentModel;

    namespace TextBoxes
    {
        public partial class Form1 : Form
        {
            BindingSource bs1 = new BindingSource();
            public Form1()
            {
                InitializeComponent();
                this.Load += Form1_Load;
            }
            void Form1_Load(object sender, System.EventArgs e)
            {
                DataTable dt = new DataTable();
                dt.Columns.Add("Name");
                dt.Rows.Add("Donald Trump");
                dt.Rows.Add("Sergei Rachmaninoff");
                dt.Rows.Add("Bill Gates");

                bs1.DataSource = dt;
                bs1.RaiseListChangedEvents = true;
                bs1.CurrencyManager.Position = 1;

                textBox1.DataBindings.Add("Text", bs1, "Name");
                textBox2.DataBindings.Add("Text", bs1, "Name");
            }
        }
    }

2 个答案:

答案 0 :(得分:0)

你可以使用endEdit强制刷新 - 如果你把它放在textchanged上,那么当你改变textbox1时,textbox2会自动改变。

private void textBox1_TextChanged(object sender, EventArgs e)
{
    bs1.EndEdit();
}

(如果你想要互惠更新,也可以对textbox2的textchanged做同样的事情。)

虽然我会说如果你绑定到一个列表,组合会不会更好?

答案 1 :(得分:0)

在您的代码中添加以下方法...它将起作用...

<强> FormDesigner.cs

        this.textBox1.LostFocus += new System.EventHandler(this.textBox1_LostFocus);
        this.textBox2.LostFocus += new System.EventHandler(this.textBox2_LostFocus);

<强> Form.cs

        private void textBox1_LostFocus(object sender, EventArgs e)
        {
            textBox2.DataBindings.Clear();
            textBox2.DataBindings.Add("Text", bs1, "Name");
        }

        private void textBox2_LostFocus(object sender, EventArgs e)
        {
            textBox1.DataBindings.Clear();
            textBox1.DataBindings.Add("Text", bs1, "Name");
        }