为什么我在数据绑定组合框中获取过时数据?

时间:2013-02-12 18:10:04

标签: c# winforms data-binding combobox listbox

我有一个包含2个数据绑定列表框和两个数据绑定组合框的表单。我正在使用类型化数据集。控件绑定到一对表,其中包含来自此schema的以下架构和数据。一个listbox和一个comboBox绑定到bar表;另一个listboxcomboBox绑定到foo表。

当selectIndexChanged事件触发foo listBox时,我会获得条形listBoxcomboBox中所选文本的当前值。

但是,当我使用foo comboBox并尝试访问barComboBox.SelectedText事件中的FooComboBox_SelectedIndexChanged时,我会从SelectedText获取之前选择的值而不是新值。 BarListBox.Selected给出了当前值。

请注意,我使用FooListBox进行选择,两个事件处理程序都按预期运行。

任何人都可以解释这里发生了什么以及如何解决这个问题?

带有示例数据的表单截图:

enter image description here

数据集设计师:

enter image description here

form1.cs代码:

//Standard using statements and namespace info

    public partial class Form1 : Form
    {
        //Loading DataSets and initializing here

        private void FooListBox_SelectedIndexChanged(object sender, EventArgs e)
        {
            Console.WriteLine("The value in the bar ListBox is {0}", barListBox.Text);
        }

        private void FooComboBox_SelectedIndexChanged(object sender, EventArgs e)
        {
            Console.WriteLine("The value in the bar comboBox is {0}", barComboBox.Text);
        }
    }

1 个答案:

答案 0 :(得分:0)

我没有找到你解释的任何行为。

请检查此代码,请更正我转载的代码是错误的。

我使用了Combo Box项目,ListBox项目在FormLoad中添加为来自某些webServiceMethod的数据源

Form1.Designer.cs中的

this.comboBox1 = new System.Windows.Forms.ComboBox();
            this.listBox1 = new System.Windows.Forms.ListBox();
            this.SuspendLayout();
            // 
            // comboBox1
            // 
            this.comboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
            this.comboBox1.FormattingEnabled = true;
            this.comboBox1.Location = new System.Drawing.Point(32, 55);
            this.comboBox1.Name = "comboBox1";
            this.comboBox1.Size = new System.Drawing.Size(188, 21);
            this.comboBox1.TabIndex = 0;
            this.comboBox1.SelectedIndexChanged += new System.EventHandler(this.comboBox1_SelectedIndexChanged);
            // 
            // listBox1
            // 
            this.listBox1.FormattingEnabled = true;
            this.listBox1.Location = new System.Drawing.Point(261, 55);
            this.listBox1.Name = "listBox1";
            this.listBox1.Size = new System.Drawing.Size(255, 95);
            this.listBox1.TabIndex = 1;
            this.listBox1.SelectedIndexChanged += new System.EventHandler(this.listBox1_SelectedIndexChanged);
Form1.cs中的

* *

  private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
       MessageBox.Show("The value in the bar comboBox is "+ comboBox1.Text);
    }

    private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        MessageBox.Show("The value in the bar comboBox is "+ listBox1.Text);
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        WebServiceRef.CM_ServiceSoapClient soapClient = new WebServiceRef.CM_ServiceSoapClient();

        comboBox1.DataSource = soapClient.GetAllCategories();

        listBox1.DataSource = soapClient.GetAllCategories();
    }

我已经根据数据源表单WebService方法更改了数据,但是当你提醒你的行为时,我没有发现任何问题。