2011-05-18 61 views
3

我无法绑定到Combobox的SelectedValue和Text属性。下面是相关的代码片段:Windows窗体组合框 - 多个属性的数据绑定

DataTable dt1 = DataAccess.GetLoanPurposes(); 
ddLoanPurpose.DisplayMember = "Name"; 
ddLoanPurpose.ValueMember = "Value"; 
ddLoanPurpose.DataBindings.Add("Text", _scenario, "LoanPurposeString", false); 
ddLoanPurpose.DataBindings.Add("SelectedValue", _scenario, "LoanPurpose", false);    
ddLoanPurpose.DataSource = dt1; 

我可以绑定到任何文本的SelectedValue和一切工作出色。当我试图绑定到时遇到麻烦。只有第一个Databinding有效(上例中的Text to LoanPurposeString)。如果我切换数据绑定...的顺序

ddLoanPurpose.DataBindings.Add("SelectedValue", _scenario, "LoanPurpose", false); 
ddLoanPurpose.DataBindings.Add("Text", _scenario, "LoanPurposeString", false); 

...然后我失去了文本LoanPurposeString的结合,但现在的SelectedValue结合LoanPurpose。所以我的问题是双重的:为什么不把这两个绑定连接到我的_scenario对象,为什么顺序很重要?

+0

你想通过绑定“文本”属性来实现什么?你不需要它。 ddLoanPurpose.DataBindings.Add(“Text”,_scenario,“LoanPurposeString”,false); – 2011-05-19 12:29:56

回答

2

数据绑定到两个不同的属性似乎不被支持(至少不是基于我的研究)。在这个特定的实例中,最好的解决方案是将我的_scenario对象(LoanPurpose和LoanPurposeString)中的单独属性合并为一个KeyValuePair属性。

public KeyValuePair<string, string> LoanPurpose { get; set; } 

我只需要确保DataSource中的ValueMember变量是一个KeyValuePair。因此,像...

DataTable dt = new DataTable(); 
dt.Columns.Add(new DataColumn("Name", typeof(string))); 
dt.Columns.Add(new DataColumn("Value", typeof(KeyValuePair<string, string>))); 
DataRow dRow = dt.NewRow(); 
dRow["Name"] = "Eric"; 
dRow["Value"] = new KeyValuePair<string, string>("1", "Eric"); 
dt.Rows.Add(dRow); 

的绑定语法将是相同的,如我原来的问题,唯一的区别是,ValueMember现在是一个KeyValuePair对象,而不是一个字符串。

ddLoanPurpose.DisplayMember = "Name"; 
ddLoanPurpose.ValueMember = "Value"; 
ddLoanPurpose.DataSource = dt;