c# - 具有相同数据源的多个组合框 (C#)

标签 c# winforms combobox datasource best-in-place


更新:此问题现已解决,请参阅下面的答案。


在我的一个表单(在 Windows 表单应用程序中)上,我有 3 个组合框。这些组合框需要显示价格列表(在文本中,后端值为整数)。

所有这些组合框都使用相同的数据源(类型为 TSPrice 的 List<>,ValueMember 设置为 Price,DisplayMember 设置为 Description)。

我的问题是...每次我从其中一个下拉菜单中选择一个价格选项时,它们都会更改为相同的值...这是否与它们都绑定(bind)到同一数据源有关?

这是我绑定(bind)它们的方式:

var priceList = new List<TSPrice>
                    {
                        new TSPrice(0, ""),
                        new TSPrice(0, "Half Day"),
                        new TSPrice(0, "Full Day"),
                        new TSPrice(0, "1 + Half"),
                        new TSPrice(0, "2 Days"),
                        new TSPrice(0, "Formal Quote Required")
                    };

objInsuredPrice.DataSource = priceList;
objTPPrice.DataSource = priceList;
objProvSum.DataSource = priceList;

objInsuredPrice.ValueMember = "Price";
objTPPrice.ValueMember = "Price";
objProvSum.ValueMember = "Price";

objInsuredPrice.DisplayMember = "Description";
objTPPrice.DisplayMember = "Description";
objProvSum.DisplayMember = "Description";

objInsuredPrice.SelectedIndex = 0;
objTPPrice.SelectedIndex = 0;
objProvSum.SelectedIndex = 0;

//objInsuredPrice.DataSource      = objTPPrice.DataSource     = objProvSum.DataSource     = priceList;
//objInsuredPrice.ValueMember     = objTPPrice.ValueMember    = objProvSum.ValueMember    = "Price";
//objInsuredPrice.DisplayMember   = objTPPrice.DisplayMember  = objProvSum.DisplayMember  = "Description";
//objInsuredPrice.SelectedIndex   = objTPPrice.SelectedIndex  = objProvSum.SelectedIndex  = 0;

编辑:问题是它们都绑定(bind)到 Saurabh 确认的同一个数据源。我就是这样解决的。

var priceList = new List<TSPrice>
                    {
                        new TSPrice(0, ""),
                        new TSPrice(1, "Half Day"),
                        new TSPrice(2, "Full Day"),
                        new TSPrice(3, "1 + Half"),
                        new TSPrice(4, "2 Days"),
                        new TSPrice(5, "Formal Quote Required")
                    };

var insuredList = new TSPrice[5];
var TPList = new TSPrice[5];
var provList = new TSPrice[5];

priceList.CopyTo(insuredList);
priceList.CopyTo(TPList);
priceList.CopyTo(provList);

objInsuredPrice.DataSource = insuredList;
objTPPrice.DataSource = TPList;
objProvSum.DataSource = provList;

objInsuredPrice.ValueMember     = objTPPrice.ValueMember    = objProvSum.ValueMember    = "Price";
objInsuredPrice.DisplayMember   = objTPPrice.DisplayMember  = objProvSum.DisplayMember  = "Description";
objInsuredPrice.SelectedIndex   = objTPPrice.SelectedIndex  = objProvSum.SelectedIndex  = 0;

最佳答案

也许你也可以尝试这个解决方案,只需为第二个组合框分配一个新的上下文:

                combobox1.DataSource = results;
                combobox1.DisplayMember = "DisplayValue";
                combobox1.ValueMember = "Value";

                combobox2.BindingContext = new BindingContext();   //create a new context
                combobox2.DataSource = results;
                combobox2.DisplayMember = "DisplayValue";
                combobox2.ValueMember = "Value";

谢谢

关于c# - 具有相同数据源的多个组合框 (C#),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4344366/

相关文章:

c# - 如何在 Telegram Bot 中制作复选框列表?

php - 组合框可以选择以 HTML 格式键入条目

c# - 显卡适配器的 PNPDeviceID 是否唯一?

c# - Winforms - ResizeEnd 在调整窗体大小时未被调用

c# - WinForms 按钮 : Autosize Maximumsize

ms-access - 组合框设置默认值

java - 如何强制重新渲染 JavaFX ComboBox 下拉列表单元格?

c# - 使用 PEM 文件中的 DSA 私钥获取字符串的 SHA1 符号

c# - UWP map 控件: Center map around more than one point

c# - 如何刷新列表框的数据源