【问题标题】:Multiple ValueMembers From One ComboBox C#来自一个 ComboBox C# 的多个 ValueMembers
【发布时间】:2017-03-16 10:37:51
【问题描述】:

我想为组合框中的值成员分配多个字段。从代码中可以看出,当前赋值给value成员的字符串是“title”,在cboCustomers_SelectionChangeCommited事件中,可以看到一个文本框已经被赋值为选中的值。

我希望实现的是将另外 2 个字段分配给值成员(“名字”、“姓氏”),并为另外两个文本框分配这些值。

我希望我已经清楚了。如果不是,请指定,我将尝试重新解释。

 private void Form3_Load(object sender, EventArgs e)
                    {
                        try
                        {
                            dbConn = new OleDbConnection(conString);
                            sql = @"SELECT customer.title, firstname, lastname, product.name, account.balance
                                  FROM (account INNER JOIN customer ON account.custid = customer.custid) INNER JOIN product ON account.prodid = product.prodid;";

                            daItems = new OleDbDataAdapter(sql, dbConn);
                            daItems.Fill(dtAccBal);


                            cboCustomers.DataSource = (dtAccBal);
                            cboCustomers.DisplayMember = "firstname";
                            cboCustomers.ValueMember = "title";
                            cboCustomers.SelectedIndex = -1;

                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show(ex.Message, "Error!");
                        }
                    }


                    private void cboCustomers_SelectionChangeCommitted(object sender, EventArgs e)
                    {
                        if (cboCustomers.SelectedIndex > -1)
                        {
                            try
                            {
                                txtTitle.Text = cboCustomers.SelectedValue.ToString();



                            }
                            catch (Exception ex)
                            {
                                MessageBox.Show(ex.Message, "Error!");
                            }
                        }
                    }
                }

【问题讨论】:

  • 这是错误的,你不应该像这样使用具有多个值的下拉项。
  • 你能推荐一种替代方法吗?

标签: c# winforms combobox valuemember


【解决方案1】:

您可以使用实现INotifyPropertyChanged 接口的对象并将DataBindings 添加到您的TextBoxes。

示例:

实现INotifyPropertyChanged的类Person

public class Person : INotifyPropertyChanged
{
    private string _firstName;
    public string FirstName
    {
        get { return _firstName; }
        set
        {
            if (value == _firstName) return;
            _firstName = value;
            OnPropertyChanged();
        }
    }

    private string _lastName;
    public string LastName
    {
        get { return _lastName; }
        set
        {
            if (value == _lastName) return;
            _lastName = value;
            OnPropertyChanged();
        }
    }

    public override string ToString() => $"{FirstName} {LastName}";

    public event PropertyChangedEventHandler PropertyChanged;
    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

添加表单ComboBox“comboBoxPeople”和两个TextBoxes“textBoxFirstName”、“textBoxLastName”。

更改表单的构造函数:

public Form1()
{
    InitializeComponent();

    var people = new BindingList<Person> {
        new Person() { FirstName = "Peter", LastName = "Pan" },
        new Person() { FirstName = "Tinker", LastName = "Bell" },
        new Person() { FirstName = "James", LastName = "Hook" },
        new Person() { FirstName = "Wendy", LastName = "Darling" },
    };

    var bindingSource = new BindingSource() { DataSource = people };

    comboBoxPeople.DataSource = bindingSource;
    textBoxFirstName.DataBindings.Add(nameof(TextBox.Text), bindingSource, nameof(Person.FirstName), false, DataSourceUpdateMode.OnPropertyChanged);
    textBoxLastName.DataBindings.Add(nameof(TextBox.Text), bindingSource, nameof(Person.LastName), false, DataSourceUpdateMode.OnPropertyChanged);
}

现在您有一个组合框,里面装满了人。选择另一个人后,文本框将自动填充适当的数据。

【讨论】:

    猜你喜欢
    • 2013-11-30
    • 2019-10-20
    • 2017-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-22
    • 1970-01-01
    相关资源
    最近更新 更多