Stu*_*ens 16 c# data-binding combobox winforms
我有以下课程:
class Address
{
public string City {get; set;}
public string Street {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
我有一个带有2个组合框的表格.我将这些组合框绑定到Address类:
CityComboBox.DataSource = GetCityDataSource();
StreetComboBox.DataSource = GetStreetDataSource();
Address address = new Address();
CityComboBox.DataBindings.Add("SelectedItem", address, "City");
StreetComboBox.DataBindings.Add("SelectedItem", address, "Street");
Run Code Online (Sandbox Code Playgroud)
城市和街道数据库不完整,因此有时用户应将自定义值写入组合框.问题是 - 组合框数据绑定不允许将自定义值写入此组合框.这种行为有解决方法吗?
提前致谢!
Sim*_*n S 14
这有效:(在您的情况下)
设置DrowdownStyle为Dropdown并绑定到ComboBox的Text属性而不是SelectedItem.
对于这两个组合框,你似乎想文本的约束City和Street该实例的属性Address类.你不似乎想要追加的任何物品List<string>被退回GetCityDataSource()或GetStreetDataSource()方法.
因此,由于下面绑定的Text 目标属性不与与您的数据源关联的(不可更改的)项集合纠缠在一起,因此以下修改应使您的代码正常工作:(我已使用VS 2010验证了下面代码更改的本质).
CityComboBox.DataSource = GetCityDataSource();
StreetComboBox.DataSource = GetStreetDataSource();
Address address = new Address();
CityComboBox.DropDownStyle = ComboBoxStyle.DropDown
CityComboBox.DataBindings.Add("Text", address, "City");
StreetComboBox.DropDownStyle = ComboBoxStyle.DropDown
StreetComboBox.DataBindings.Add("Text", address, "Street");
Run Code Online (Sandbox Code Playgroud)
PS!只有当您想要使用City和Street数据进行简单的UI 指导时,上述方法才有效.您没有在地址数据和注册地址的对象之间建立永久关系.如果要保持数据规范化,则希望将外键存储到City,Street(可能还有Zipcode)表中的条目.
随着用户定义的城市和街道名称,你会得到大量的模糊数据(例如Washington DC,WASHINGTON D.C.,St. Patricks rd.,Saint Patrick's road等),这在未来将难以利用执行SQL查询 WHERE Street = [something].使用标准化数据,您只需执行一次WHERE StreetID = [specificID].
编辑
如果您尝试在同一个UI对话框中同时执行两项操作(选择街道和城市,例如人员/公司资料以及 维护应用程序的内部街道和城市列表),那么您必须使用一种不同的方法.
最简单的可能是在组合框旁边添加"新城市"和"新街道"按钮,并在用户在对话框中提供正确的输入时更新组合框的数据源.
您还可以使用字符串"[add New]"向组合框数据源添加虚拟条目,并在选择此项目时使用特殊处理.由于这种方法涉及篡改组合的源列表,因此很容易变得有点混乱.
示例应用程序
带有List<string>数据绑定ComboBox的示例表单,它使用数据源

选择预定义街道后的关键属性

选择自定义街道后的关键属性

| 归档时间: |
|
| 查看次数: |
12321 次 |
| 最近记录: |