nok*_*nal 37 .net combobox winforms
我主要是一个ASP.NET开发人员,但我正在研究一个WinForms应用程序,并注意到ASP.NET组合框(html select)和WinForms之间存在很大差异.我发现(可能不正确)WinForm的组合框只有一个"标签",而ASP.NET允许你指定一个"标签"和一个"值".
我希望使用WinForms组合框(或其他类似的控件)与标签和值(Foobar/42329).这可能吗?我试图寻找答案,但没有提出太多.如果没有办法实现这一点,那么如何设计一个WinForm组合框来表示具有相关数据库ID的城市呢?
Mar*_*ell 49
我可以想到几个方面:
ToString()一个City类return Name + " / " + Id;TypeConverterDisplayText返回相同的属性,并使用DisplayMember最后一个:
var data = cities.Select(city => new {
Id = city.Id, Text = city.Name + " / " + city.Id }).ToList();
cbo.ValueMember = "Id";
cbo.DisplayMember = "Text";
cbo.DataSource = data;
Run Code Online (Sandbox Code Playgroud)
Jam*_*Ide 38
假设您的值是唯一的,您可以先填充字典然后将组合框绑定到字典.不幸的是,数据绑定需要IList或IListSource,因此您必须将其包装在Binding Source中.我在这里找到了解决方案.
private void PopulateComboBox()
{
var dict = new Dictionary<int, string>();
dict.Add(2324, "Toronto");
dict.Add(64547, "Vancouver");
dict.Add(42329, "Foobar");
comboBox1.DataSource = new BindingSource(dict, null);
comboBox1.DisplayMember = "Value";
comboBox1.ValueMember = "Key";
}
Run Code Online (Sandbox Code Playgroud)
小智 6
您可以尝试创建一个名为的小类ComboBoxItem,如下所示:
public class ComboBoxItem<T>
{
public string Label { get; set; }
public T Value { get; set; }
public override string ToString()
{
return Label ?? string.Empty;
}
}
Run Code Online (Sandbox Code Playgroud)
然后当你需要获得一个对象时,只需将其转换为一个对象ComboBoxItem.
可以通过设置其属性将 ComboBox 绑定到对象集合DataSource。
默认情况下,SelectedValue 属性将赋予选定的对象,列表将调用ToString每个对象并显示结果。
但是,如果设置ComboBox 的DisplayMember属性,它将在列表中显示 DisplayMember 中命名的属性的值。同样,您可以设置ComboBox 的ValueMember属性,SelectedValue 属性将返回 ValueMember 命名的属性的值。
Name因此,您需要将 ComboBox 绑定到具有和属性的对象列表Value。
然后,您可以将 ComboBox 的 [DisplayMember属性设置为Name,并将ValueMember属性设置为Value。
编辑:您还可以调用该Add方法并为其提供这样的对象而不是数据绑定。或者,您可以将其绑定到 aList<T>或数组。
| 归档时间: |
|
| 查看次数: |
52953 次 |
| 最近记录: |